2016-10-05 9 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オブジェクトは以前のコンテンツの所有権を失い、outerscopeは所有者になります。 std :: moveはベクトルスワップのようなものです。あなたが外側と内側を交換すると、内側が破壊されても、外側が所有するコンテンツには影響しません。

関連する問題