C++day03 匿名函数的使用和注意事项

大家好,我阿林又回来了。今天我分享的内容是c++相关的内容。是匿名函数的相关注意事项,希望能对大家的学习有一点帮助。

函数的返回值是一个元素(复杂类型的),返回的是一个新的匿名对象(所以会调用匿名对象类的拷贝构造函数)

匿名函数当返回值时如果没有人使用他就会结束自己的生命周期。如果有人使用则会到函数结束的时候结束生命周期。

下面我们用代码展示一下效果。

#include <iostream>


using namespace std;

class Location
{
public:
	Location(int xx=0,int yy=0) 
	{
		X = xx; 
		Y = yy;
		cout << "construct Object" << endl;
	}
	//copy构造函数 完成对象的初始化
	Location(const Location& obj)
	{
		X = obj.X;
		Y = obj.Y;
	
	}
	~Location()
	{
		cout << X << ", " << Y << "Object destroyed." << endl;
	}
public:
	int GetX()
	{
		return X;
	}
	int GetY()
	{
		return Y;
	}
private:
	int X;
	int Y;

};


//g函数 返回一个元素
//注意在这里返回的A并不是A的地址,而是通过A的拷贝函数创建的匿名对象,然后把A给析构了,因为返回的匿名函数的g()没有人去使用,所以的匿名函数的生命周期是在g()结束就开始析构函数
//结论1 :函数的返回值是一个元素(复杂类型的),返回的是一个新的匿名对象(所以会调用匿名对象类的拷贝构造函数)
//匿名对象的去留

Location g()
{
	Location A(1, 2);
	return A;
}

void objplay()
{
	g();
}

void objplay2()
{
	//用匿名对象初始化m 此时的c++编译器直接把匿名对转成m;(扶正)从匿名转成有名字了m

	Location m = g();//第一种方法

	//也会有第二种方法赋值
	Location m2 = g();
	m2 = g();//这个使用的就是等号,相当于拷贝函数赋值

	printf("匿名对象,被扶正,不会析构掉");
	cout << m.GetX() << endl;
}


int main()
{
	objplay();
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值