#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;
}