为什么以及何时删除复制构造函数和运算符 =

lit*_*net 3 c++ operators copy-constructor

作为 C++ 新手,我想知道为什么显式“禁用”或删除类的 = 运算符和复制构造函数很有用:

SomeClass& operator=(SomeClass&) = delete;
SomeClass(SomeClass&) = delete;
Run Code Online (Sandbox Code Playgroud)

我想如果该类是单身人士,这是有道理的。但是还有其他情况吗?(也许这与性能问题有关?)

Bau*_*gen 5

这与性能无关。当复制您的类没有意义时,您禁止复制,即如果不清楚复制相关类的含义。

著名的例子是标准 IO 流,它们具有复杂的内部状态并且std::unique_ptr无法复制,因为它是指向其托管对象的唯一指针。