std ::在堆栈对象上移动

时间:2016-10-05 18:01:25

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

我知道这是一个非常基本的,甚至可能是令人尴尬的问题,但我很难理解这一点。如果我std ::从堆栈上的某些东西移动到另一个对象,当原件超出范围时,是否还可以使用另一个对象?

#include <iostream>
#include <string>

int
main(int argc, char* argv[])
{
    std::string outer_scope;

    {
        std::string inner_scope = "candy";
        outer_scope = std::move(inner_scope);
    }

    std::cout << outer_scope << std::endl;

    return 0;
}

在我尝试打印时,outer_scope仍然有效吗?

1 个答案:

答案 0 :(得分:4)

是的,它仍然有效,innerscope对象失去了以前内容的所有权,而outerscope成为了所有者。 std :: move就像一个矢量交换。如果你交换外部和内部,破坏内部的胜利会影响外部现在拥有的内容。