c++对象的生命周期
参考链接:https://juejin.cn/post/6844904152833753096
1. 程序对象的生存期
-
全局对象在程序启动时分配,在程序结束时销毁。
-
对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时销毁。这个过程由栈自动完成。
-
局部static对象在第一次使用前分配,在程序结束时销毁。
-
C++还支持动态分配对象。动态分配的对象的生存期与它们在哪里创建是无关的,只有当显式地被释放时,这些对象才会销毁。
2. 程序示例
#include <iostream>
using namespace std;
class CPerson{
private:
int age;
public:
// 构造函数
CPerson(){
cout<<"constructor"<<endl;
}
// 构造函数(重载)
CPerson(int age){
this->age = age;
cout<<"constructor "<<age<<endl;
}
~CPerson(){
cout<<"deconstructor "<<age<<endl;
}
};
CPerson p1(1); // main执行前,构造函数被调用
void func(){
static CPerson p2(2); // func第一次执行前,构造函数被调用
CPerson p3(3); // p3的构造函数被调用
// func结束时,p3的析构函数被调用
}
int main()
{
CPerson p4(4), *p5; // 调用p4的构造函数
func();
func();
p5 = new CPerson(5); // 调用p5的构造函数
delete p5; // 调用p5的析构函数
// main结束时,p4的析构函数被调用
return 0;
} // 程序结束前,p1, p2的析构函数被调用
输出:
constructor 1
constructor 4
constructor 2
constructor 3
deconstructor 3
constructor 3
deconstructor 3
constructor 5
deconstructor 5
deconstructor 4
deconstructor 2
deconstructor 1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!