如果在没有移动构造函数的情况下移动对象,会发生什么情况?

What happens if you move an object without move constructor?

提问人:Foaly 提问时间:12/11/2013 更新时间:12/11/2013 访问量:1225

问:

如果在用户定义的对象上调用,而该对象未定义移动构造函数,会发生什么情况?它只是简单地复制吗?std::move()

C++ 移动 移动构造函数

评论

1赞 Cubic 12/11/2013
你的意思是删除了移动构造函数?因为如果您自己没有定义移动构造函数,并且所有对象成员都有一个移动构造函数,则会生成一个微不足道的移动构造函数。
3赞 juanchopanza 12/11/2013
请注意,它本身对对象不执行任何操作。所以答案取决于上下文。例如,移出的对象可用于移动分配。或者完全不同的东西。因此,它并不完全依赖于可移动的类型std::move
1赞 Yakk - Adam Nevraumont 12/11/2013
std::move不动,也不前进。std::forward

答:

5赞 user2428400 12/11/2013 #1

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

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