在C++11中使用=delete阻止对象被拷贝

  • 不定义拷贝构造函数是不行的,编译器会自动生成默认的拷贝构造函数;
  • 应该删除拷贝构造函数,即在拷贝构造函数的参数列表的后面使用=delete指明该函数是被删除的。
  1. class A{
  2. public:
  3. A() = default; // 使用合成的默认构造函数
  4. A(const A& a) = delete; // 阻止拷贝
  5. A& operator=(const A& a) = delete; // 阻止赋值
  6. };

阻止拷贝的示例:

  • iostream类阻止了拷贝,以避免多个对象写入或读取相同的IO缓冲区。

!!析构函数不能定义为删除的函数

没有析构函数的类不允许定义该类型的变量或创建该类型的临时变量,否则该变量无法销毁。