2017-12-07 1 views
1

Ist das Verhalten dieses Codes wohldefiniert? Wird die zurückgegebene Referenz immer korrekt sein? Geht der Aufruf von Bar :: method() immer gut?Rückgabe des Verweises auf den lokal dereferenzierten Zeiger

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

Ja, warum nicht? Die konstruierte Instanz von 'Bar' wird nach' main' zerstört. – Ivan

+0

Es hängt davon ab, was Sie mit "immer" meinen. Nein, es wäre nicht korrekt, bevor du 'make_unique' und irgendwann nach' main() 'terminiert hast. – Slava

+0

Also habe ich Recht, dass die Referenz korrekt sein wird, bis die Instanz der Bar zerstört wird? – Victor

Antwort

0

Ist das Verhalten dieser Code gut definiert?

Ja ist es.

Die Instanz struct Bar wird außerhalb des Geltungsbereichs, also zerstört, nach main() endet.

Verwandte Themen