C++编程思想 第1卷 第11章 引用和拷贝构造函数 默认拷贝构造函数 替代拷贝构造函数的方法 防止按值传递

怎么才能不必了解拷贝构造函数就能写一个具有一定功能的类
仅当准备用按值传递的方式传递类对象时,才需要拷贝构造函数

如果不写拷贝构造函数,编译器将为我创建
如何保证一个对象永远不会被通过按值传递方式传递

有一个简单的计算防止通过按值传递方式传递:声明一个私有拷贝构造函数。
甚至不必去定义它,除非成员函数或友元函数需要执行按值传递方式传递

如果用户试图用按值传递方式传递或返回对象,编译器将会发出一个出错信息
这是因为拷贝构造函数是私有的。因为已显式地声明我们接管了这项工作,
所以编译器不再创建默认的拷贝构造函数

 

//: C11:NoCopyConstruction.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Preventing copy-construction

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

void f(NoCC);

int main() {
  NoCC n;
//! f(n); // Error: copy-constructor called
//! NoCC n2 = n; // Error: c-c called
//! NoCC n3(n); // Error: c-c called
} ///:~

 

NoCC(const NoCC&);
这里使用了const
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值