記住 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 :
類型的復制和賦值都不被允許
復制和賦值的禁止應該盡可能明顯