C++类的拷贝构造调用情况

拷贝构造:一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用,其作用是使用一个已经存在的对象,去初始化同类的一个新对象

调用拷贝构造的三种情况:
(1)用类的一个对象去初始化类的另一个对象
(2)函数的参数为类对象,调用函数时从实参值传递给形参的过程,用实参去构造初始化形参
(3)函数的返回值是类对象

因为局部对象在离开简历它的函数体时就消亡了,不可能在返回调用函数后继续生存,所以编译系统会在调用函数的表达式中创建一个无名临时对象,该临时对象只在函数调用处的表达式中,所谓返回return对象,实际上是调用拷贝构造函数把该对象的值拷入到临时对象

#include<iostream>
using namespace std;

class Test
{
public:
    Test(int value = 0)
    {
        cout<<"Test construct"<<endl;
    }
    Test(const Test &t)
    {
        cout<<"Test copy construct"<<endl;
        data = t.data;
    }
    ~Test()
    {}
    int getdata()
    {return data;}
private:
    int data;
};

Test fun(Test x)
{
    int value;
    value = x.getdata();
     value;
     Test tmp(value);          //调用拷贝构造的第三种情况
     return tmp;
}

void main()
{
    Test t;   //调用拷贝构造的第一种情况
    fun(t);   //调用拷贝构造的第二种情况
}

所谓浅拷贝,指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。大多情况下“浅拷贝”已经能很好地工作了,但是一旦对象存在了动态成员,那么浅拷贝就会出问题了

对于对象中有动态成员的,那就不能仅仅简单地赋值了,而应该重新动态分配空间
即“深拷贝”,

对拷贝构造中还应注意以下问题:

(1)一个类中可以存在多于一个的拷贝构造函数,普通拷贝构造和+const的拷贝构造
(2)如果一个类中没有定义拷贝构造函数,那么编译器会自动产生一个默认的拷贝构造函数。这个默认的参数可能为 X::X(const X&)或 X::X(X&),由编译器根据上下文决定选择哪一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值