C++ 拷贝构造函数调用场景

#include <iostream>

using namespace std;

/************************************************************************/
/* 拷贝构造函数的调用方式
1.使用一个已创建完毕的对象初始化一个新的对象;
2.值传递方式给函数参数传值;
3.以值得方式返回局部对象;                                                                     */
/************************************************************************/
class Person{
public:

	Person(int age)
	{
		m_age = age;
		cout<<"Person有参构造函数"<<endl;
	}

	Person(const Person &per)
	{
		m_age = per.m_age;
		cout<<"Person拷贝构造函数"<<m_age<<endl;
	}

	~Person()
	{
		cout<<"Person()析构函数"<<endl;
	}

private:
	int m_age;
};

void test1()
{
	//1.使用一个已创建完毕的对象初始化一个新的对象;
	Person per(10);
	Person per1 = per;//隐式法拷贝构造函数调用,编译器自动转显示法生成匿名对象,将Person per1 = Person(per);进行转换
}

void value_fun2(Person per)
{
	
}
void test2()
{
	//2.值传递给函数的参数
	Person per2(20);
	value_fun2(per2);//将per实参传递给value_fun新参时,会出现隐式法拷贝构造函数调用,per= per2;
}

Person value_fun3()
{
	Person per(30);
	return per;
}


void test3()
{
	//2.以值得方式返回函数的局部对象
	Person per3 = value_fun3();//函数返回一个局部对象,通过隐式法将返回对象赋值给per3, per3= per,函数返回后,per生命周期结束,先调用析构函数,再调用per3析构函数
}


int main()
{

	//test1();
	//test2();

	test3();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值