Сегодня в университете мне рекомендовали профессором, что я проверил бы (this != ©)
в конструкторе копирования, аналогично тому, как вы должны это делать при перегрузке operator=
. Однако я поставил под сомнение это, потому что я не могу представить ни одной ситуации, когда this
когда-либо был бы равен аргументу при построении объекта.
Он признал, что я сделал хороший момент. Итак, мой вопрос заключается в том, имеет ли смысл выполнять эту проверку, или это невозможно, чтобы это испортило?
Изменить: Я думаю, я был прав, но я просто оставлю это открытым некоторое время. Может быть, кто-то придумает какую-нибудь сумасшедшую загадочную магию С++.
Edit2: Test a(a)
компилируется на MinGW, но не MSVS10. Test a = a
компилируется на обоих, поэтому я предполагаю, что gcc будет вести себя как-то похоже. К сожалению, VS не показывает отладочное сообщение с "Variable a used without initialized". Тем не менее, это сообщение действительно отображается для int i = i
. Может ли это считаться недостатком языка С++?
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
{
}
}
};