c++ - 使用 C++ 的 std::move 从内部范围内的对象到外部范围安全吗?

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

在下面的 C++11/14 代码片段中,我使用 std::move 来 将内部范围内的 vector Y 的内容“move ”到 vector 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 中)循环正确吗?

最佳答案

是的, vector 遵循值语义。

move 后,存储空间现在归外部 vector 所有。

关于c++ - 使用 C++ 的 std::move 从内部范围内的对象到外部范围安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38885113/

相关文章:

c++ - MSYS SDL-2.0 "C compiler cannot create executables"

c++ - 根据抽象类快速确定子类

c++ - 做全局变量的正确 "C++ way"是什么?

c++ - 为什么 C++17 的 std::any 不允许通过 any_cast 返回可 move 值?

reference - 我什么时候应该使用引用而不是转让所有权?

c++ - 将 std::unique_ptr 推回 std::vector 时编译器不会失败

c++ - 如何将 streambuf 复制到 unsigned char 数组?

c++ - 为什么模板参数上的 is_copy_constructible 静态断言失败?

c++ - 使用 C++ 容器最小化内存开销(std::map 和 std::vector 太贵了)

c++ - 根据模板类型动态指定要使用的方法