使用C ++的std :: move从内部作用域中的对象到外部作用域是否安全?

时间:2016-08-10 23:29:02

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

在以下C ++ 11/14代码段中,我使用std::move 将内部范围中向量Y的内容“移动”到向量X 在外部范围:

void foo() {
   vector<int> X(10);
   ...
   for (...) {
      vector<int> Y(100);
      ...
      X = std::move(Y);
   }
   ...Safe to use X here which contains Y's last content?
 }
每次迭代时,在循环的顶部/底部调用

Y的构造函数/析构函数。由于内容已从Y“移出”到X,因此这些内容在循环结束后仍然可行(现在存储在X中)正确吗?

1 个答案:

答案 0 :(得分:8)

是的,vector遵循值语义。

移动后,存储现在由外部矢量拥有。