C++对象的创建和销毁过程分析
对象的创建和销毁过程分析
1、对象的创建过程
①给对象划分内存空间(栈、堆)
②执行初始化列表
-
根据继承表的顺序调用父类的无参构造或有参构造
通过:父类(val)调用父类的有参构造 -
根据成员变量的定义顺序调用类类型成员的无参构造或有参构造
通过:类类型成员名(val)调用类类型成员的有参构造
- 对其他成员初始化
③执行自己的构造函数、可能去申请额外资源
2、对象的销毁过程(创建的逆序)
①执行自己的析构函数、可能去释放资源
②根据类类型成员顺序的逆序,调用他们的析构函数
③根据继承表的顺序,调用父类的析构函数
④释放对象的内存
实例:
#include<iostream>
using namespace std;
class A
{
public:
A(void)
{
cout << "A无参构造" << endl;
}
A(int num)
{
cout << "A的有参构造" << endl;
}
~A(void)
{
cout << "A的析构函数" << endl;
}
};
class B
{
public:
B(void)
{
cout << "B无参构造" << endl;
}
B(int num)
{
cout << "B的有参构造" << endl;
}
~B(void)
{
cout << "B的析构函数" << endl;
}
};
class C
{
public:
C(void)
{
cout << "C无参构造" << endl;
}
C(int num)
{
cout << "C的有参构造" << endl;
}
~C(void)
{
cout << "C的析构函数" << endl;
}
};
class D
{
public:
D(void)
{
cout << "D无参构造" << endl;
}
D(int num)
{
cout << "D的有参构造" << endl;
}
~D(void)
{
cout << "D的析构函数" << endl;
}
};
class E : public B,public A
{
C c;
D d;
public:
E(void)//:A(20),B(20),c(20),d(20)初始化列表,调用有参构造
{
cout << "E无参构造" << endl;
}
~E(void)
{
cout << "E的析构函数" << endl;
}
};
int main(int argc,const char* argv[])
{
E* e = new E; //BACDE
delete e; //先申请的后释放(栈) EDCAB
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!