2009-04-17 11 views
9

Después de leer this article en el blog de Herb Sutter, experimenté un poco y me encontré con algo que me desconcierta. Estoy usando Visual C++ 2005, pero me sorprendería si esto dependiera de la implementación.Referencia de Const a temporal

Aquí está mi código:

#include <iostream> 

using namespace std; 

struct Base { 
    //Base() {} 
    ~Base() { cout << "~Base()" << endl; } 
}; 

int main() 
{ 
    const Base & f = Base(); 
} 

Cuando ejecutado, muestra "~Base()" dos veces ... Pero si yo no-comentar el constructor, se muestra sólo una vez !

¿Alguien tiene una explicación para esto?

Respuesta

24

Depende de la implementación de IS.

El estándar permite que ocurra una copia cuando se vincula una referencia temporal a una constante. En su caso, VC++ realiza una copia solo cuando el constructor está implícitamente definido. Esto es inesperado, pero permitido.

C++ 1x will fix this.

+0

Sorprendente respuesta, muchas gracias Señor :) – Drealmer

+0

Interesante. ¿Esto dará como resultado el corte de objetos en algunos casos? –

+0

"C++ 1x arreglará esto". Dios mío, ¿es eso lo que están llamando el próximo estándar ahora o es esto una broma ingeniosa? – veefu

Cuestiones relacionadas