移动分配会破坏引用吗?

时间:2015-12-23 21:53:00

标签: c++ move-assignment-operator

我不明白移动分配是否能够/自由地改变变量x的地址并使所有指针和引用存储& x无效。 我认为这是假的,因为默认移动分配会移动每个成员并保留此指针,但是它是否有保证?

编辑:示例

int x(1), y(2);
int& ref(x);
x = std::move(y);
// ref still valid ?

2 个答案:

答案 0 :(得分:7)

移动到对象或从对象移动不会使对象的引用或指针无效。两个对象的地址保持不变。

答案 1 :(得分:1)

引用只是现有对象的备用名称。也就是说,xref完全可以互换(虽然我不确定decltype(x)decltype(ref)是否相同):当x使用其他更改时名称ref将相应地看到相同的更改。同样,反过来说。指向对象的指针也是如此。

当引用的实体以某种方式消失时,会发生无效的引用和指针。例如,当您对std::vector<T>中的元素进行引用并且向量的容量发生更改时,引用将失效,因为基础对象会移开。

当然,对于int使用std::move(y)的示例而言,无论如何都是毫无意义的:内置类型实际上没有任何移动构造函数,即它等同于副本。但是,即使使用类类型,对象和对它的引用仍然引用同一个对象。