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

问题描述 投票:0回答:2

为什么显式“禁用”或删除类的 = 运算符和复制构造函数很有用:

SomeClass& operator=(SomeClass&) = delete;
SomeClass(SomeClass&) = delete;

我想如果这个类是单例的话这是有道理的。但还有其他情况吗? (也许这与性能问题有关?)

c++ operators copy-constructor
2个回答
7
投票

这与性能无关。当复制你的类没有意义时,即如果不清楚复制相关类意味着什么,你就禁止复制。

著名的例子是具有复杂内部状态的标准 IO 流,并且

std::unique_ptr
无法复制,因为它是指向其托管对象的唯一指针。


2
投票

我认为以下是一个很好的补充::

如果你想禁止按值传递对象,你可以删除它们。

© www.soinside.com 2019 - 2024. All rights reserved.