Lassen Sie uns die nächste Probe betrachten:C++ - Standard: Rückgabe per Kopie, um eine Referenz ohne RVO zu initialisieren: Gibt es eine Kopie?
struct big_type {};
// Return by copy
auto factory() { return big_type{}; }
void any_scope_or_function() {
big_type&& lifetime_extended = factory();
}
Unter der Annahme, RVO verboten ist oder gar nicht vorhanden und in irgendeiner Art und Weise wird oder kann big_type()
kopiert werden? Oder wird die Referenz direkt an die temporäre innerhalb der return
Anweisung gebaut werden?
Ich möchte sicher sein, dass der big_type
Destruktor nur einmal aufgerufen wird, wenn any_scope_or_function
endet.
Ich benutze C++ 14, falls sich das Verhalten zwischen den Standardversionen geändert hat.
@NathanOliver Ich habe vergessen, diesen Compiler-Schalter herauszunehmen. Whoopsies. –
Außerdem kann ich C++ 17 nicht verwenden; C++ höchstens 14. –
@ Peregring-lk aber für den Rekord .. dies in C++ 17 geändert, die nicht mehr Kopie Elision hier erfordert. –