析构函数的调用
#include <iostream>
using namespace std;
class A
{public:
A()
{cout<<"startA"<<endl;}
~A()
{cout<<"endA"<<endl;}
};
class B:public A
{public:
B()
{cout<<"startB"<<endl;}
~B()
{cout<<"endB"<<endl;}
};
class C:public B
{public:
C()
{cout<<"startC"<<endl;}
~C()
{cout<<"endC"<<endl;}
};
int main()
{
B* a = new C();
delete a;
a=nullptr;
return 0;
}
****************************
startA
startB
startC
endB
endA
****************************
这道题为什么A的析构函数会被调用,不是要按照当前是那个类型就调用那个析构吗?
using namespace std;
class A
{public:
A()
{cout<<"startA"<<endl;}
~A()
{cout<<"endA"<<endl;}
};
class B:public A
{public:
B()
{cout<<"startB"<<endl;}
~B()
{cout<<"endB"<<endl;}
};
class C:public B
{public:
C()
{cout<<"startC"<<endl;}
~C()
{cout<<"endC"<<endl;}
};
int main()
{
B* a = new C();
delete a;
a=nullptr;
return 0;
}
****************************
startA
startB
startC
endB
endA
****************************
这道题为什么A的析构函数会被调用,不是要按照当前是那个类型就调用那个析构吗?
全部评论
创建B对象的构造顺序为AB
析构B的顺序和构造相反,所以是BA
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享