关于析构函数,构造函数匿名对象的总结,以厚忘了,可以回来观看很全

//对象做函数参数
//1 研究拷贝构造 
//2 研究构造函数,析构函数的调用顺序

//总结 构造和析构的调用顺序

#include "iostream"
using namespace std;

class ABCD 
{
public:
	ABCD(int a, int b, int c)//有参构造函数
	{
		this->a = a;
		this->b = b;
		this->c = c;
		printf("ABCD() construct, a:%d,b:%d,c:%d  
", this->a, this->b, this->c);
	}
	~ABCD()//析构函数
	{
		printf("~ABCD() construct,a:%d,b:%d,c:%d  
", this->a, this->b, this->c);
	}
	int getA() 
	{
		return this->a;
	}
protected:
private:
	int a;
	int b;
	int c;
};


class MyE
{
public:
	MyE():abcd1(1,2,3),abcd2(4,5,6),m(100)//无参构造函数,外加初始化
	{
		cout<<"MyD()"<<endl;
	}
	~MyE()
	{
		cout<<"~MyD()"<<endl;
	}
	MyE(const MyE & obj):abcd1(7,8,9),abcd2(10,11,12),m(100)//赋值构造函数和初始化
	{
		printf("MyD(const MyD & obj)
");
	}

protected:
	//private:
public:
	ABCD abcd1; //c++编译器不知道如何构造abc1
	ABCD abcd2;
	const int m;

};

int doThing(MyE mye1)
{
	printf("doThing() mye1.abc1.a:%d 
", mye1.abcd1.getA()); 
	return 0;
}

int run2()
{
	MyE myE;
	doThing(myE);//没成想会 调用拷贝构造函数,形参初始化完毕后才调用geta
	return 0;
}

//
int run3()
{
	printf("run3 start..
");

	//临时对象(匿名对象)的生命周期只存在于这一句话,因为没有变量去承接它
	ABCD(400, 500, 600); //临时对象(匿名对象)的生命周期只存在于这一句话,因为没有变量去承接它  

	ABCD abcd = ABCD(100, 200, 300);//这句不理解,不用调用构造函数
	//若直接调用构造函数呢?
	//想调用构造函数对abc对象进行再复制,可以吗?
	//在构造函数里面调用另外一个构造函数,会有什么结果?

	printf("run3 end
");
	return 0;
}

int main()
{
	//run2();
	run3();
	system("pause");
	return 0;
}

  

 匿名对象引用的时候必须用const 不然报错

原文地址:https://www.cnblogs.com/xiaochige/p/6573097.html