Sección 12.2.5 en C++ 03 dice "Un límite temporal a un miembro de referencia en un inicializador de cc del constructor (12.6.2) persiste hasta que el constructor sale "
así que traté siguiente programaEnlace temporal a referencia const en lista de inicializador c'tor
#include<iostream>
using namespace std;
struct foo
{
foo()
{
cout<<"foo c'tor"<<endl;
}
~foo()
{
cout<<"foo d'tor"<<endl;
}
};
struct bar
{
const foo &ref;
bar():ref(foo())
{
cout<<"bar c'tor"<<endl;
}
};
int main()
{
bar obj;
}
La salida que recibo es:
foo c'tor
foo d'tor
bar c'tor
Ahora según la norma, temporales generados por foo() en ini c'tor La lista t del códec de barra se destruirá después del c'tor de barra para que foo d'tor
se imprima después de bar c'tor
pero es al revés.
Por favor, explica el motivo.
¿Qué sucede si hace referencia a 'ref' dentro del constructor? Quizás el compilador decida que, dado que no se usa en realidad, puede destruirlo antes. –
VS2008 produce la salida 'foo, bar, foo' donde gcc 4.3.4 produce la salida' foo, foo, bar'. Interesante ... – Naveen
g ++ error, informe. –