2009-04-17 3 views
9

Dopo aver letto this article sul blog di Herb Sutter, ho sperimentato un po 'e mi sono imbattuto in qualcosa che mi lascia perplesso. Sto usando Visual C++ 2005, ma sarei sorpreso se questo dipendesse dall'implementazione.Const riferimento a temporaneo

Ecco il mio codice:

#include <iostream> 

using namespace std; 

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

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

Quando eseguito, mostra "~Base()" due volte ... Ma se io non-commento del costruttore, visualizza solo volta!

Qualcuno ha una spiegazione per questo?

risposta

24

Questa implementazione IS dipende.

Lo standard consente di eseguire una copia quando si associa un riferimento temporaneo a un riferimento const. Nel tuo caso, VC++ esegue una copia solo quando il costruttore è implicitamente definito. Questo è inaspettato, ma permesso.

C++ 1x will fix this.

+0

Sorprendente risposta, grazie mille Sir :) – Drealmer

+0

Interessante. Ciò comporterà l'affettamento degli oggetti in alcuni casi? –

+0

"C++ 1x risolverà questo problema." oh caro, è quello che stanno chiamando il prossimo standard ora o è uno scherzo spiritoso? – veefu