delete和析构函数的关系
提出疑问:
1)delete一个new的对象,是否就是调用了该对象的析构函数,通过析构函数来释放内存呢?
2)如果不是,那这个对象的析构函数是何时被调用的?
3)delete如何释放的对象内存空间呢?
4)如果这个对象包含了类似Clist的容器,那在delete这个对象时是如何释放这个Clist的,是通过在对象的析构函数中释放该Clist吗?
GoodLuckxl的回答:
析构释放资源 delelte释放内存
看着好象有点一样其实关系并不大
我认为delete和析构关系是:前者是后者执行充分条件,后者对前者没有必然的影响
1. 对象只在其生命周期结束时自动调用析构函数释放对象资源
而delete这个动作是释放对象就是标志生命周期结束所以必然引起析构动作
所以delete是析构的充分条件
2. 而析构函数调用只是会可能使用delete来释放对象某些成员占用的内存
达到释放整体资源的目的。但是注意只是可能调用delete如果成员没有动态占用
那么就没有必要delete。所以后者对前者不必然联系
至于说使用CList成员
那还是一样无非是概念的叠加解释
Label:
在对象生命周期结束时释放资源就包括这个CList成员的资源
在实现的时候如果CList容器放的char* 等
需要手动通知CList声明周期结束释放其中的资源
而CList这个对象也遵寻这一释放原则 此时处理回到Label处
ugg的回答:
1:
系统调用delete时,会在delete内调用对象的析构函数.
2:对象被销毁时,首先调用析构函数.析构函数也可以显示调用A a; a.~A();来销毁对象..
3:delete释放内存空间,只是对使用该块内存空间的对象,调用析构函数,并且指定该处
空间已经无对象使用..
4:如果在对象内是new出来的,在析构函数中需要delete..
piaochen_2002的回答:
可参考: < <深度探索C++对象模型> >
从CSDN论坛的讨论中提取出来:
http://topic.csdn.net/t/20060308/13/4600547.html
转载于:https://blog.51cto.com/neicole/960325