Domanda

Dopo aver letto Questo articolo sul blog di Herb Sutter, ho sperimentato un po' e mi sono imbattuto in qualcosa che mi ha lasciato perplesso.Sto utilizzando Visual C++ 2005, ma sarei sorpreso se dipendesse dall'implementazione.

Ecco il mio codice:

#include <iostream>

using namespace std;

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

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

Quando eseguito, viene visualizzato "~Base()" due volte...Ma se rimuovo il commento dal costruttore, lo visualizza solo una volta!

Qualcuno ha una spiegazione per questo?

È stato utile?

Soluzione

Questo dipende dall'implementazione.

Lo standard consente che venga eseguita una copia quando si associa un riferimento temporaneo a un riferimento const.Nel tuo caso, VC++ esegue una copia solo quando il costruttore è definito implicitamente.Ciò è inaspettato, ma consentito.

C++1x risolverà questo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top