C++ 匿名对象的生命周期——强化训练(二)

#include<iostream>
using namespace std;

class ABCD
{
public:
	ABCD()
	{

	}
	ABCD(int a, int b, int c)
	{
		m_a = a;
		m_b = b;
		m_c = c;
		cout << "ABCD类有参构造";
		cout << "a=" << m_a << "b=" << m_b << "c=" << m_c << endl;
	}

	~ABCD()
	{
		cout << "我是ABCD类的析构" << endl;
	}
	int getA()
	{
		return m_a;
	}
private:
	int m_a;
	int m_b;
	int m_c;
};
class Mye
{
public:
	Mye() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(7)
	{
		cout << "我是MYe的构造函数" << endl;
	}
	Mye(const Mye& obj) :abcd1(8, 9, 10), abcd2(11, 12, 13), m(8)
	{
		cout << "我是mye的拷贝构造函数" << endl;
	}
	~Mye()
	{
		cout << "我是Mye的析构函数" << endl;
	}

public:
	ABCD abcd1;
	ABCD abcd2;
	const int m;

};
int dothing(Mye mye)
{
	cout << "dothing() mye.abcd1,getA()" << mye.abcd1.getA() << endl;
	return 0;
}
int run2()
{
	Mye mye;//先调用ABCD类的有参构造函数,再调用mye类的有参构造函数
	dothing(mye);//先调用Mye类的有参构造函数,再调用mye类的拷贝构造函数
	return 0;//析构调用顺序与构造调用顺序相反
}
int run3()
{
	cout << "run3 start..."<< endl;
	//生成一个匿名对象(临时对象),刚被构造就会被析构
	//因为生成的匿名对象没有一个对象去接
	//ABCD(4, 5, 6);//不输出run3 end
	
	//生命周期为整个函数周期
	ABCD abcb3 = ABCD(4, 5, 6);//可以输出run3 end
	cout << "run3 end" << endl;
	return 0;
}
int main()
{
	//run2();
	run3();
	system("pause");

}

猜你喜欢

转载自blog.csdn.net/error0_dameng/article/details/82052512