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

本文通过一个具体的示例,详细介绍了C++中copy构造函数的一种调用场景:当函数返回一个局部对象时,若该对象需要被返回并使用,则会触发copy构造函数的调用来创建一个新的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值