delete析构的调用

来源:互联网 发布:2016网络作家排名 编辑:程序博客网 时间:2024/04/30 09:22

如果基类的析构函数不是虚函数,那么在new出来对象,最后delete回收的时候调用析构函数的原则:

析构函数看指针是什么类型的,就调用那个类的析构函数,然后按继承的顺序,依次来调用父类的析构;

主要看delete 后面跟的指针是什么类型的!!!!

#include <iostream>using namespace std;class A{public:int num;A(){num=100;cout<<"A"<<endl;}~A(){cout<<"~A"<<endl;}};class B:public A{public: int number;B(){number=222;cout<<"B"<<endl;}~B(){cout<<"~B"<<endl;}};class C{public: C(){cout<<"C"<<endl;}~C(){cout<<"~C"<<endl;}};class D:public C{public: D(){cout<<"D"<<endl;}~D(){cout<<"~D"<<endl;}};int main(){B *b=new B;delete b;   //AB ~B~AA *a=new B;delete a;  //AB~Aint *p=NULL;A *a1=new B;p=  &(((B*)a1)->number);delete ( D*)a1;cout<<*p<<endl;  //是乱码,证明a1的空间,确实删除了!!//若a1是(D*)类型的,和new B没有半点儿关系,但是因为delete的a1是(D*)//类型的,所以其调用析构函数的顺序为:AB~D~C,但是B 的空间删除了;//这里我们可以输出B类中的number的值已经验证了; system("pause");return 0;}


4 0
原创粉丝点击