c++copy构造函数调用场景4

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();

}

猜你喜欢

转载自blog.csdn.net/MrRobot_TI/article/details/81664915