记住 the Big Three
什么情况下我们需要自定义复制构造函数或赋值操作符?这个问题有一个通用的答案,一个几乎总是正确的答案:无论何时你需要定义析构函数、复制构造函数、或赋值操作符三个中的任意一个,你也需要定义另外两个。
要使用 boost::noncopyable, 你要从它私有地派生出不可复制类。虽然公有继承也可以,但这是一个坏习惯。公有继承对于阅读类声明的人而言,意味着IS-A (表示派生类IS-A 基类)关系,但表明一个类IS-A noncopyable 看起来有点不太对。要从noncopyable派生,就要包含 "boost/utility.hpp" 。
#include "boost/utility.hpp"
class please_dont_make_copies : boost::noncopyable {};
以下情形下使用 noncopyable :
类型的复制和赋值都不被允许
复制和赋值的禁止应该尽可能明显