在这种情况下,我们需要禁用默认复制构造函数并分配运算符?

rat*_*zip 6 c++ private copy-constructor assignment-operator

如果我们将复制构造函数和赋值运算符设置为私有并且不提供任何实现,则它们将被禁用,如下所示:

class Test
{
   priavate:
       Test(const Test&);
       Test& operator=(const Test&);
};
Run Code Online (Sandbox Code Playgroud)

但在这种情况下我们需要这样做?我的意思是我们什么时候应该这样做?

Moh*_*ain 6

如果希望此类的对象不可复制.

可能有许多原因导致对象无法或不应该复制到其他对象.一些例子是:

  1. 日志文件
  2. 一些突变
  3. 在单身人士模式
  4. 对象工厂
  5. 某些版本的智能指针

对于上面的示例,编译器提供的默认复制构造函数版本和默认赋值运算符可能会导致意外结果.

onwarnds,你可以使用=delete语法删除编译器提供的默认版本.

另一种用途是仅通过类实用程序强制(限制)对象的复制virtual Base* clone().

相关:三条规则或五条规则