C++之拷贝构造函数

通过按值传递的方式传递一个对象时,就创立了一个新对象,函数体内的对象是由函数体外的原来存在的对象传递的。

当编译器需要从现有的对象创建新对象时,可以通过定义自己的函数来实现,因为需要创建新的对象,因此这个函数应该是构造函数,并且传递给这个函数的单一参数必须是创立的对象的源对象,但是该对象不能以按值传递的方式传入构造函数,而是需要以引用的方式来传递,可以使用源对象的引用,这个就是拷贝构造函数

拷贝构造函数的形式是 X(X&),其中,X是类名

使用了拷贝构造函数,就使得编译器在创建新对象时,避免使用位拷贝

默认的拷贝构造函数执行的是位拷贝

仅当准备用按值传递的方式传递类对象时,才需要拷贝构造函数,但是如何避免按值传递呢,那就是将拷贝构造函数声明为私有的,这样就可以防止按值传递。

#include <iostream>

using namespace std;

class NoCC
{
    int i;
    NoCC(const NoCC&);   //声明
public:
    NoCC(int ii = 0) : i(ii)
    {
    }
};

void f(NoCC)
{
}

int main()
{
    NoCC n;
    //f(n);    //error 会调用拷贝构造函数,但是构造函数是私有的,无法调用
    //NoCC n2 = n;   //error, 同上
    //NoCC n3(n);   //error, 同上
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值