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;
}
Ja, warum nicht? Die konstruierte Instanz von 'Bar' wird nach' main' zerstört. – Ivan
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
Also habe ich Recht, dass die Referenz korrekt sein wird, bis die Instanz der Bar zerstört wird? – Victor