文章目录
来源: https://blog.csdn.net/qq_37375427/article/details/78736327
程序中存在多个对象
- 调用父类的构造函数(下面的例子中无父类)
- 调用
Test
成员变量(Member
类)的构造函数(调用顺序与声明顺序相同:先m_A后m_B) - 调用类自身的构造函数
实例代码:
#include <iostream>
using namespace std;
class Member
{
private:
const char* m_s;
public:
Member(const char* s)
{
cout << "Member(const char* s):" << s << endl;
m_s = s;
}
~Member()
{
cout << "~Member():"<< m_s << endl;
}
};
class Test
{
private:
Member m_A;
Member m_B;
public:
Test() :m_B("mB"), m_A("mA")//先m_A后m_B,与声明顺序有关
{
cout << "Test()" << endl;
}
~Test()
{
cout << "~Test()" << endl;
}
};
int main()
{
Test t;
return 0;//执行完return 0后,再执行析构函数
}
运行结果:
Member(const char* s):mA
Member(const char* s):mB
Test()
//要退出main()函数,即执行return 0后,再执行析构函数。
//析构顺序与构造相反
~Test()
~Member():mB
~Member():mA
对于栈对象和全局对象,类似于入栈与出栈的顺序,最后构的对象被最先析构!!
堆对象的析构发生在使用delete的时候,与delete的使用顺序相关!!