【问题标题】:What happens if you move an object without move constructor?如果在没有移动构造函数的情况下移动对象会发生什么?
【发布时间】:2013-12-10 22:00:17
【问题描述】:

如果在用户定义的对象上调用 std::move() 会发生什么,该对象未定义移动构造函数?是抄袭的吗?

【问题讨论】:

  • 您的意思是删除了移动构造函数?因为如果你自己不定义移动构造函数,并且所有对象成员都有移动构造函数,就会生成一个普通的移动构造函数。
  • 请注意,std::move 本身对对象没有任何作用。所以答案取决于上下文。例如,被移动的对象可以用于移动分配。或者完全不同的东西。所以它并不完全依赖于可移动构造的类型
  • std::move 不动,std::forward 不转发。

标签: c++ move move-constructor


【解决方案1】:

是的,移动将退回到复制。这就是像 std::vector 这样的标准容器如何在移动方面实现大小调整,但仍与只能复制的类兼容。

但是,该类可能具有隐式定义的移动构造函数 - 请参阅本指南。 http://en.cppreference.com/w/cpp/language/move_constructor#Implicitly-declared_move_constructor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2017-09-19
    • 2011-06-16
    相关资源
    最近更新 更多