复合类的使用后移动POD部分与默认移动ctor

时间:2015-08-30 06:44:52

标签: c++ c++11

假设我们有一个非POD和POD部分的类。移动构造函数和移动分配是默认的。移动后是否可以安全使用此类实例的POD部分?

#include <string>
struct A {
    std::string s = "foo";
    int i = 42;
};
A a;
A b = std::move(a);
int j = a.i; //OK or UB?

是否保证元素移动/复制(所以这样就可以了)或者符合实现可以改变POD部分(例如,通过交换默认构造的对象)?

1 个答案:

答案 0 :(得分:1)

默认移动ctor只是对每个成员(和基础)进行移动。

移动基本类型只是复制它。

所以这个级别很明确。

然而,从语义上讲,这是一个错误:你应该设法避免依赖移动对象状态的细节,除非它有效&#39;。