Copy构造函数和匿名对象

1:函数的返回值是一个元素 (复杂类型) 返回的是一个新的匿名对象(所以会调用匿名对象类的copy构造函数)
2:匿名对象的去和留
如果用匿名对象  初始化   另一个同类型的对象  匿名对象 转成有名对象
如果用匿名对象  =赋值给  另一个同类型的对象  匿名对象 被析构

class MyPos
{
public:
	MyPos(int x,int y)
	{
		m_x = x;
		m_y = y;
		cout <<"初始化构造函数"<< m_x << m_y << endl;
	}
	MyPos(const MyPos & obj)
	{
		m_x = obj.m_x;
		m_y = obj.m_y;
		cout << "初始化复制构造函数" << m_x << m_y << endl;
	}
	~MyPos()
	{
		cout << "GameObject Destroy..." << endl;
	}
	int GetX()
	{
		return m_x;
	}
	int GetY()
	{
		return m_y;
	}
private:
	int m_x, m_y;
};

//返回一个新的对象(没有名字 匿名对象)
MyPos f()
{
	MyPos p(2, 3);
	return p;
}

void PlayObj()
{
	//1.初始化
	//用匿名对象初始化m 此时C++编译器 直接把匿名对象转成m(转正) 从匿名转成有名
	MyPos m = f();
	cout << "匿名对象 被转正 不会被析构掉" << endl;
	cout << m.GetX() << endl;

	//2.赋值
	MyPos m2(1, 2);
	m2 = f();//用匿名对象赋值给m2对象,然后匿名对象析构
	cout << "匿名对象 被析构掉" << endl;
	cout << m2.GetX() << endl;

}

int main()
{
	PlayObj();
	system("pause");
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值