【C++】对象的构造和析构顺序


来源: https://blog.csdn.net/qq_37375427/article/details/78736327

程序中存在多个对象

  1. 调用父类的构造函数(下面的例子中无父类)
  2. 调用Test成员变量(Member类)的构造函数(调用顺序与声明顺序相同:先m_A后m_B)
  3. 调用类自身的构造函数
    实例代码:
#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的使用顺序相关!!

猜你喜欢

转载自blog.csdn.net/vict_wang/article/details/88749529