Ich bin auf der Suche nach oben lifetime of a temporary auf cppreference.com und ich fand etwas geändert von C++ 14:Lebensdauer eines temporären Objekt gebunden an ein Referenzelement in Elementinitialisierung Liste (C++ 14)
Jedes Mal, wenn ein Verweis auf einen vorübergehendes oder zu einer Basis subobject von einer temporären, die Lebensdauer der temporären gebunden ist, verlängert die Lebensdauer der Referenz anzupassen, mit folgenden Ausnahmen:
...
eine temporäre Bindung an eine Referenz Das Element in einer Konstruktorinitialisierungsliste bleibt nur so lange bestehen, bis der Konstruktor beendet wird, und nicht so lange, wie das Objekt existiert. (Anmerkung: solche Initialisierung ist schlecht ausgebildet, wie von DR 1696) (bis C++ 14)
Ich habe den Standard gibt es wirklich keine solche Aussage. ($ 12.2/5 Temporäre Objekte [class.temporary])
Bedeutet es ab C++ 14, dass die Lebensdauer einer temporären Bindung an ein Referenzelement auf die Lebensdauer des Objekts erweitert wird?
Ich habe versucht, den folgenden Code mit GCC und CLANG scheinen beide nicht, das temporäre wird zerstört, wenn der Konstruktor endet.
#include <iostream>
struct X {
~X() { std::cout << "X dtor\n"; }
};
struct Y {
Y() : x_(X()) { std::cout << "Y ctor\n"; }
const X& x_;
~Y() { std::cout << "Y dtor\n"; }
};
int main()
{
Y y;
std::cout << "Hello, world!\n";
}
Ergebnis:
Y ctor
X dtor
Hello, world!
Y dtor
Habe ich es falsch verstanden?
Haben Sie den [Fehlerbericht] (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1696) gelesen? – NathanOliver
** JA ** (Sie haben es falsch verstanden) – Walter