【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的使用顺序相关!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值