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
 

点赞