C++中构造和析构的顺序


先说结论:

构造:

  • 基类成员对象的构造函数
  • 基类的构造函数
  • 子类成员对象的构造函数
  • 子类的构造函数

析构:

  • 子类的析构函数
  • 子类成员的析构函数
  • 基类的析构函数
  • 基类成员的析构函数

借一幅图(https://blog.csdn.net/wq_1996/article/details/78219479

 

可见是刚好反过来的。 

// 验证构造函数顺序

#include<iostream>

class Mem{
public:
    Mem(int x)
    {
        std::cout << "mem constructor " << x << std::endl;
    }
};

class Base{
public:
    Base()
    {
        std::cout << "base constructor" << std::endl;
    }
    Mem* m = new Mem(1);
};

class Test : Base{
private:
    int x;
public:
    Test()
    {
        std::cout << "test constructor" << std::endl;
    }
    Mem* m = new Mem(2);
};

int main()
{
    Test* t = new Test();
}
View Code

// 验证析构函数顺序

#include<iostream>

class Mem{
public:
    ~Mem()
    {
        std::cout << "mem" << std::endl;
    };
};

class Base{
public:
    ~Base()
    {
        std::cout << "~base" << std::endl;
    };
    Mem m;
};

class Test:Base{
public:
    ~Test()
    {
        std::cout << "~test" << std::endl;
    };
    Mem m;
};

int main()
{
    Test t;
    t.~Test();
    getchar();
    return 0;
}
View Code

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM