参考链接: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