为什么以及何时删除复制构造函数和 operator=
Why and when delete copy constructor and operator=
作为 c++ 新手,我想知道为什么显式 'disable' 或删除 class 的 = 运算符和复制构造函数是有用的:
SomeClass& operator=(SomeClass&) = delete;
SomeClass(SomeClass&) = delete;
如果 class 是单例,我想这就有意义了。但是还有其他情况吗? (也许这与性能问题有关?)
这与性能无关。只要复制您的 class 没有意义,您就禁止复制,即如果不清楚复制有问题的 class 意味着什么。
著名的例子是具有复杂内部状态的标准 IO 流和 std::unique_ptr
无法复制,因为它是指向其托管对象的唯一指针。
我认为以下是一个很好的补充::
如果你想禁止按值传递对象,你可以删除它们。
作为 c++ 新手,我想知道为什么显式 'disable' 或删除 class 的 = 运算符和复制构造函数是有用的:
SomeClass& operator=(SomeClass&) = delete;
SomeClass(SomeClass&) = delete;
如果 class 是单例,我想这就有意义了。但是还有其他情况吗? (也许这与性能问题有关?)
这与性能无关。只要复制您的 class 没有意义,您就禁止复制,即如果不清楚复制有问题的 class 意味着什么。
著名的例子是具有复杂内部状态的标准 IO 流和 std::unique_ptr
无法复制,因为它是指向其托管对象的唯一指针。
我认为以下是一个很好的补充::
如果你想禁止按值传递对象,你可以删除它们。