关于构造函数的析构函数

菜鸟2333号 2018-06-06 08:46:00
#include<iostream>
#include<string>

using namespace std;
class A
{
public:
A(){cout<<"A cons"<<endl;}
virtual void func(){cout<<"A::func()"<<endl;}
~A(){cout<<"A des"<<endl;}
};
class D
{
public:
D(){cout<<"D cons"<<endl;}
void func(){cout<<"D::func()"<<endl;}
~D(){cout<<"D des"<<endl;}
};
class B:public A{
public:
B(){cout<<"B cons"<<endl;}
void func(){cout<<"B::func()"<<endl;}
~B(){cout<<"B des"<<endl;}
D d;
};


class C:public B{
public:
C(){cout<<"C cons"<<endl;}
void func(){cout<<"C::func()"<<endl;}
~C(){cout<<"C des"<<endl;}
};
int main()
{
C c;
A a = c;
a.func();
A *aa = new C;
aa->func();
A &aaa = c;
aaa.func();
}


请问为什么析构函数的调用不是与构造函数相反?
...全文
648 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2018-06-06
  • 打赏
  • 举报
回复
栈上的对象构造函数与析构函数的调用会是相反的,动态分配的对象取决你的申请与释放的时机
棉猴 2018-06-06
  • 打赏
  • 举报
回复
A *aa = new C;

动态分配内存,需要调用delete来手动释放内存。所以,在main()函数结束后,程序不会自动释放内存,即不会自动调用析构函数。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧