2016-09-20 8 views
0

この例でC++参照戻り

class Object { 
    Object(int val); 
} 


std::map<unsigned, Object> myMap; 
Class Foo { 

    Object &getObject (unsigned Id, int val) { 

    auto pair = myMap.emplace(std::piecewise_construct, std::forward_as_tuple(Id), std::forward_as_tuple(val)); 
    if (pair.second) { 
     // do something 
    } 
    else { 
     // do another 
    } 
    return pair.first->second; 
    } 

} 

は(特大機能を破壊し)ペアで返された参照が有効滞在ですか?

+0

このサイトでは英語を使用してください(タイトルを含む)。 –

答えて

0

はい有効です。

emplacefirst挿入要素とsecondを据え付けるが成功したかを知らせるboolことにイテレータであるとstd::pairを返します。

secondtrueの場合は、firstのイテレータがマップ内の要素を指しているため、そのオブジェクトの参照が機能します。

myMapは、いずれもgetObject()を呼び出していることを確認してください。

0

myMapのスコープがグローバルである限り、参照は常に有効です。つまり、ガベージを指すのではなく、標準マップの実際の要素を指します。

関連する問題