删除复制构造函数和运算符=

时间:2015-12-15 14:36:35

标签: c++ operators copy-constructor

作为一名c ++ newbe,我想知道为什么明确禁用'或者删除类的=运算符和复制构造函数:

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

我想如果这个班级是一个单身人士,那就会发生这种情况。但还有其他情况吗? (也许这与性能问题有关?)

2 个答案:

答案 0 :(得分:4)

这与性能无关。如果复制你的课程没有意义,你就不允许复制,即如果不清楚复制该课程的意思是什么。

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

答案 1 :(得分:1)

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

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