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
    }

posted @   冲他丫的  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示