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

posted on   七昂的技术之旅  阅读(505)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示