Pergunta

std::string x(x);

Esta falha muito mal no meu compilador.Isso significa que eu deveria testar this != &that na minha própria construtores de cópia, ou posso assumir que nenhum cliente nunca vai ser tão estúpido?

Foi útil?

Solução

Inicializar algo consigo mesmo é um comportamento indefinido, o que provavelmente pode até significar que, uma vez chamado, você não pode detectá -lo mais tarde. Suponha que o compilador o detecte e, por apesar, gera montagem para demônios nasais, não uma chamada para o seu construtor de cópias?

Na prática, você pode assumir que o cliente não é tão estúpido e, se forem, é comercial depurar e descobrir.

Outras dicas

Você não deve testar o código que tenta travar mal. Ver Referências nulas. Diz

"Assim como você deve assumir que um ponteiro não nulo é válido, você deve assumir que uma referência é válida. Você deve ter fé em seus colegas programadores".

Eu quero complementar

... Você deve assumir que a fonte de uma cópia é válida.

Se você "consertar" o seu caso, o que fazer para este?

string x = string(x);

Que código não é correta, de acordo com o padrão e não faz sentido para verificá-lo e a melhor coisa que pode acontecer é um rápido falha de modo que o usuário possa corrigir o código.

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