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
      {
          ···
      };