c++ - move 是否会使对象处于可用状态?

标签 c++ c++11 move-semantics

假设我有两个 vector ,我将一个移到另一个,v1 = std::move(v2);在此之后 v2 是否仍处于可用状态?

最佳答案

从 n3290,17.6.5.15 库类型的 move 状态 [lib.types.movedfrom]

  1. Objects of types defined in the C++ standard library may be moved from (12.8). Move operations may be explicitly specified or implicitly generated. Unless otherwise specified, such moved-from objects shall be placed in a valid but unspecified state.

由于状态是有效的,这意味着您可以安全地对 v2 进行操作(例如,通过分配给它,这会使其回到已知状态)。但是,由于它未指定,这意味着您不能例如依赖 v2.empty() 的任何特定值,只要它处于此状态(但调用它不会使程序崩溃)。

请注意,这一 move 语义公理(“从对象中移出的对象处于有效但未指定的状态”)是所有代码(大多数时候)都应努力实现的目标,而不仅仅是标准库组件。很像复制构造函数的语义应该进行复制,但不强制执行。

关于c++ - move 是否会使对象处于可用状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930105/

相关文章:

c++ - 如何检查线程中是否调用了析构函数?

c++11 - 为我自己的 std::vector 实现 move 语义

c++ - 异常的 C++ 链接器错误 - 'Defined in discarded section'

c++ - 纯虚函数会阻止隐式生成的 move 构造函数吗?

c++ - move 构造函数未被调用

vector - 不能使用 Vec 两次,我也不能借用它

c++ - 模板函数中的引用类型转换?

c++ - 渲染曲面 segmentation 对象 (OpenGL) 的最佳方式

c++ - 模板化动态数组上的内存泄漏

c++ - 使用 CRTP 和 'anonymous types/template' 实现观察者模式