C++ copy构造函数调用时机之匿名对象的介绍

本文通过具体示例探讨了C++中匿名对象的使用场景及其生命周期。解释了如何利用匿名对象减少对象创建的时间开销,并展示了匿名对象在不同情况下的行为表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <windows.h>
using namespace std;
//匿名对象
class NIMI
{
public:
	NIMI(int xx = 0, int yy = 0)		//	构造函数
	{
		X = xx; Y = yy;
		cout<<"构造函数"<<endl;
	}
	//copy构造函数,完成对象初始化
	NIMI(const NIMI &f)
	{
		X = f.X;
		Y = f.Y;
	}
	~NIMI()	//析构函数
	{
		cout << X << "," << Y << endl;
	}
	int getx() { return X; }
	int gety() { return Y; }
protected:
private:
	int X, Y;
};


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




//作用:
//当调用g()函数时,可直接调用匿名对象,使其变为一个有名对象,不用再生产一个对象
//牺牲内存,缩减时间
NIMI g()
{
	NIMI A(1,2);	//创建一个对象A,调用构造函数
	return A;		//return A 用A创建了一个匿名对象,所以会调用匿名对象的copy 构造函数
					//还回后,将A匿名对象析构,调用析构函数
}


//搭建一个类的舞台
void display()
{
	//用匿名对象初始化m ,C++编译器直接把匿名对象转成有名字对象 转正
	//将匿名对象直接转成m ,不再创建对象m
	NIMI m=g();	
	cout<<m.getx()<<endl;
}
//搭建一个类的舞台
//匿名对象给另一个同名对象赋值
void display2()
{
	NIMI m2(3,4);
	cout<<m2.getx()<<endl;
	m2=g();
	cout<<m2.getx()<<endl;
}
int main()
{


	display2();
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Hwang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值