禁止類成員復制,其核心就在于不允許類外部看見復制函數,包括“拷貝構造函數”、“operator =重載”。
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
private: \
TypeName(const TypeName&); \
TypeName& operator=(const TypeName&)
禁止隱式構造,則可以將默認構造函數隱藏起來,在大多數編譯器中也可以對構造函數增加explicit關鍵字來避免隱式構造。
#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \
private: \
TypeName(); \
DISALLOW_COPY_AND_ASSIGN(TypeName)
更多解釋詳見《More Effective C++》