Verifique se há “auto-atribuição” no construtor de cópias?
oje, na universidade, fui recomendado por um professor que verificaria(this != ©)
no construtor de cópia, da mesma forma que você deve fazer ao sobrecarregaroperator=
. No entanto, questionei isso porque não consigo pensar em nenhuma situação em quethis
seria sempre igual ao argumento ao construir um objet
Ele admitiu que fiz um bom argumento. Portanto, minha pergunta é: faz sentido executar essa verificação ou é impossível que isso estrague tud
Edita: Eu acho que estava certo, mas vou deixar isso em aberto por um tempo. Talvez alguém esteja inventando alguma mágica maluca de c ++ enigmátic
Edit2: Test a(a)
compila no MinGW, mas não no MSVS10.Test a = a
compila em ambos, então suponho que o gcc se comportará de maneira semelhante. Infelizmente, o VS faznã mostre uma mensagem de depuração com "Variável usada sem ser inicializada". No entanto, mostra corretamente esta mensagem paraint i = i
. Isso poderia realmente ser considerado uma falha na linguagem c ++?
class Test
{
Test(const Test ©)
{
if (this != ©) // <-- this line: yay or nay?
{
}
}
Test &operator=(const Test &rhd)
{
if (this != &rhd) // <-- in this case, it makes sense
{
}
}
};