本帖最后由 wl1383838438 于 2020-4-17 01:22 编辑
我的理解是,CStudent *stud = new CStudent("abc");你这个是在main函数中定义的,严肃的来说在不使用的时候,是需要删除的,至于你说的在析构函数中为什么删除 if (p_name)delete[] p_name;
你目前应该还没有学习到构造函数,其实你提了一个很好的问题,为什么main书中不删除?是因为你自己没有删除,这样会导致,函数无法调用你的析构函数,(但是你在main删除指针的时候,会默认调用你提供的析构函数,但是你的析构函数中又在删除一次? 这样程序就会崩溃的,触发断点!你自己可以把//的注释去掉自己试试!)
你指定了析构函数,这个时候系统并不会在为你提供默认的析构函数(通常情况下你不写析构函数,系统会为你提供默认的析构函数,((至于什么情况下目前你不用去关心),你在此处new 了一个堆栈,那么在不使用的时候应当删除指向该堆栈的指针,这样才会正确的释放堆栈,目前你都不需要关心,你只需要记住以下几点) 在后期 你慢慢地都会学到这方面的知识,现在不让你拓展是为了 不让你迷迷糊糊,和你说了,反而你可能更加不理解!
1,程序申请了堆栈那么在不使用的时候,一定要删除
2,指针在不使用的时候,一定要stud=null,
3,自己写了析构函数,那么一定要在主函数中调用,不然函数无法正常析构,
4,尽量在写函数的时候,加一些提示,如cout<<"某某函数执行中"<<endl;
析构不要写2次
~CStudent();虽然不会再执行它,但是很容易让你迷糊
后面给你代码,你自己看看吧!
在后期 你慢慢地都会学到这方面的知识,现在不让你拓展是为了 不让你迷迷糊糊,和你说了,反而你可能更加不理解!
构造函数
析构函数 都能正确的执行,并且堆栈也能够释放!