【问题标题】:Why and when delete copy constructor and operator=为什么以及何时删除复制构造函数和 operator=
【发布时间】:2015-12-15 14:36:34
【问题描述】:

作为一个 c++ 新手,我想知道为什么明确地“禁用”或删除一个类的 = 运算符和复制构造函数很有用:

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

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

【问题讨论】:

    标签: c++ operators copy-constructor


    【解决方案1】:

    这与性能无关。只要复制您的课程没有意义,即如果不清楚复制相关课程的含义,您就不允许复制。

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

    【讨论】:

    • 如果我自己不明确指定,会有默认实现吗?
    • @little_planet 在某些情况下,是的。供参考,请参见例如en.cppreference.com/w/cpp/language/copy_constructor。如果您对此有任何疑问,这将是一个关于 SO 的全新问题的基础。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多