Wenn ich ein Setup habe, wo eine Funktion, ein Objekt Bar
als ein Argument nimmt, geht das Objekt zu einer lokalen Klasse Foo
und Foo
verwendet die Bar
in seinem destructor wie:Sind lokale Objekte garantiert vorübergehende Argumente zu überleben? (C++ 11)
class Foo {
public:
Foo(const Bar& bar) : bar_(bar) {}
~Foo() {
bar_.DoSomething();
}
private:
const Bar& bar_;
};
void example_fn(const Bar& input_bar) {
Foo local_foo(input_bar);
// ... do stuff.
// When foo goes out of scope, its destructor is called, using input_bar.
}
Wenn example_fn
mit einem temporären Bar input_bar
aufgerufen wird, ist die lokale Variable Foo local_foo
garantiert vor dem temporären Argument zerstört werden? Mit anderen Worten: Sind Argumente garantiert, um lokale Variablen zu überleben?
'example_fn' kann nicht wirklich mit einem temporären aufgerufen werden, da veränderbare lvalue-Referenzen nicht an Provisorien binden. –
"ist die lokale Variable Foo local_foo garantiert vor dem temporären Argument zerstört werden" - 'input_bar' Sie meinen? Es ist kein temporäres ... – WhiZTiM
Soweit 'example_fn' betroffen ist, ist das Objekt, auf das von' input_bar' verwiesen wird, nicht temporär, also bin ich mir nicht sicher, was Sie fragen. Weiterhin wird 'bar bar' der Konstruktorparameter * von * input_bar' kopiert, so dass' input_bar' nach der Erstellung von 'local_foo' noch weniger wichtig wird. Kurz gesagt, Ihr Kommentar "Wenn' foo' den Gültigkeitsbereich verlässt, wird sein Destruktor mit 'input_bar' aufgerufen." ist nicht wahr. – WhozCraig