const referência para temporário
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?
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