2017-12-07 16 views
1

このコードの動作は明確に定義されていますか?返される参照は常に正しいでしょうか? Bar :: method()コールは常にうまくいくのでしょうか?ローカル参照されていないポインタへの参照の返却

struct Bar 
{ 
    void method() {...}; 
}; 

struct Foo 
{ 
    static unique_ptr<Bar> bar_ptr; 
    static Bar& get_reference() 
    { 
     return *bar_ptr; 
    } 
}; 

unique_ptr<Bar> Foo::bar_ptr = nullptr; 

int main() 
{ 
    Foo::bar_ptr = make_unique<Bar>(); 
    Foo::get_reference().method(); 

    return 0; 
} 
+0

はい、どうしてですか?構築された 'Bar'のインスタンスは、' main'が復帰した後に破棄されます。 – Ivan

+0

「いつも」の意味に依存します。 'make_unique'を呼び出す前と' main() 'が終了した後のいつかは間違っていません。 – Slava

+0

バーのインスタンスが破棄されるまでリファレンスが正しいと私は正しいですか? – Victor

答えて

0

明確に定義されたこのコードの動作ですか?

はいです。

struct Barのインスタンスは、main()の終了後に破棄され、範囲外になります。

関連する問題