Pergunta

Depois de ler este artigo no blog de Herb Sutter, eu experimentei um pouco e correu em algo que me intriga. Estou usando o Visual C ++ 2005, mas eu ficaria surpreso se isso era dependente de implementação.

Aqui está o meu código:

#include <iostream>

using namespace std;

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

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

Quando executado, ele exibe "~Base()" duas vezes ... Mas se eu un-comentário o construtor, ele exibe apenas uma vez !

Alguém tem uma explicação para isso?

Foi útil?

Solução

Esta é dependente de implementação.

O padrão permite que uma cópia de ocorrer quando uma ligação temporária a uma referência constante. No seu caso, executa VC ++ uma cópia somente quando o construtor é definido implicitamente. Isto é inesperado, mas permitido.

C ++ 1x vai corrigir isso .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top