【问题标题】:C++ difference between copy constructors and move semantics复制构造函数和移动语义之间的 C++ 区别
【发布时间】:2018-08-27 06:40:45
【问题描述】:

为什么要使用基于移动语义的复制构造函数?我的意思是我可以使用非常量引用并做同样的事情:从对象中获取数据而不复制。还是没有?

【问题讨论】:

  • 当返回例如在函数中创建的非静态对象时?
  • 不幸的是,“移动构造函数”没有被称为“吸出胆量构造函数”。
  • 您不能在临时对象上使用非常量引用。
  • 不用等待。看起来您想要一个具有移动语义的复制 ctor。为什么?
  • 我不知道这是一个诚实的问题还是只是一个拖钓

标签: c++ move-semantics


【解决方案1】:

嗯,是的,你可以 - 例如 auto_ptr 尝试过 - 但效果不佳:例如,你不能将具有如此破坏性副本的对象放入标准容器中,因为标准容器可能需要一个副本不破坏原件。如果例如,这将是令人惊讶的。 insert 破坏了源对象,但另一方面,在某些情况下(比如源是临时的)移动是完全有意义的。因此,像往常一样,C++ 允许这两种情况(插入为复制和移动而重载)并允许(有些人会说“强制”)您在它们之间进行选择。

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 2015-02-24
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多