Effective c++ 条款6:若不想使用编译器自动生成的函数,就该明确拒绝
-
问题:
- 当我们想禁止一个对象进行拷贝操作,就需要禁止copy constructor函数、copy assignment运算符.但是如果不声明这两个函数,而这个两个函数被需要时,编译器会自动生成
-
解决方案一:
- 将copy constructor函数、copy assignment运算符声明为private。如此,便组织编译器自行创建,且组织用户调用它
- 问题:即便如此,对象的成员函数和友元函数依然可以调用
-
解决方案二:
-
设计一个base class阻止copy动作
class unCopyable { protected: unCopyable() {} ~unCopyable() {} private: unCopyable ( const unCopyable& ) {} unCopyable& operator= ( const unCopyable& ) {} }; class D:private unCopyable { ··· };
-