c++copy构造函数调用场景4
copy构造函数拥有多种调用场景,今天主要分析其中一种调用场景。
当g()函数返回一个元素时,函数返回的是一个新的匿名对象,所以会调用copy构造函数。
代码块
#include <iostream>
using namespace std;
class Location
{
public:
Location(int xx = 0, int yy = 0) //有参构造函数
{
X = xx;
Y = yy;
cout << "Constructor Object" << endl;
}
Location(const Location & p) //copy构造函数
{
X = p.X;
Y = p.Y;
cout << "copy_constructor called." << endl;
}
~Location() //析构函数
{
cout << X << "," << Y << "Object destroyed" << endl;
}
private:
int X, Y;
};
Location g() //g函数返回一个元素
{
Location A(1, 2); //调用一次有参构造
return A;//返回一个复杂元素,返回的是一个匿名对象,所以此处调用copy构造函数
}
//g函数返回匿名对象的去留,取决于接收g函数返回值的形式,下面有两种形式:
void objplay()//用一个函数搭建舞台,清晰反映对象的完整生命周期
{
//方式1
/*
Location B;
B=g();//用匿名对象赋值给B对象,然后匿名对象析构
*/
//方式2
Location B=g();//返回的匿名对象来初始化另一个同类型的对象,匿名对象直接转成新对象
cout<<"test"<<endl;
}
void main()
{
objplay();
}