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