2016-10-05 3 views
5

나는 이것이 매우 기본적인 것, 아마도 당황스러운 질문이라는 것을 알고 있지만 이것을 이해하는 데 문제가 있습니다. 내가 std :: 스택에서 다른 객체로 이동하면 원본이 범위를 벗어날 때 다른 객체를 계속 사용할 수 있습니까?std :: stack 객체에서 이동

#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는 여전히 인쇄 할 위치에서 유효합니까?

+2

물론 가능합니다. 이동 생성자/할당의 전체 요점은 일시적인 내용을 훔치는 것입니다. 임시로 생성 된 객체가 사용되지 않으면이 객체를 사용할 수 없다면 꽤 쓸모가 없습니다. –

+0

무언가를 움직인다면, 무언가를 옮긴다는 것이 이제는 통제를 받았다는 것을 의미하며, 더 이상 통제하지 못했던 것을 의미합니다. – NathanOliver

+0

물론 이것은 – MikeMB

답변

4

예, 유효합니다. innerscope 개체는 이전에 가지고 있던 콘텐츠의 소유권을 잃고, 외부 관측자는 소유자가됩니다. std :: move는 벡터 스왑과 같습니다. 바깥 쪽과 안쪽을 바꾸면 안쪽을 파괴해도 바깥 쪽이 소유 한 내용에는 영향을 미치지 않습니다.

관련 문제