Вы не сравниваете правильный адрес. this
уже является указателем на ваш объект. И кажется, вы пытаетесь реализовать общую картину:
Foo & Foo::operator=(const Foo & rhs)
{
if(this == &rhs)
{
// :::
}
// :::
}
выше, тип this
является Foo*
и &rhs
является Foo const *
, что делает их сопоставимыми.
[Edit: добавлены соответствующие части из стандарта, заимствованные из C++ 14 проекта стандарта]
Из раздела 5.3.1 [expr.unary.op]:
- Результат унарного оператора & является указателем на его операнд. Операнд должен быть lvalue или квалифицированный идентификатор. ...
из раздела 9.3.2 [class.this]:
- В теле нестатической функции члена, ключевое слово это является выражение prvalue, значение которого является адресом объекта, для которого вызывается функция.
Поскольку this
ни именующий, ни квалифицирован-идентификатор, вы не можете взять его адрес и ваш компилятор должен сообщить об ошибке, если вы попробуете.
'operator =' оператор _assignment_, а не сравнение. –
'if (& this == & rhs)' Вероятно, вы хотите использовать 'if (this == & rhs)', но слишком сильно сузили контекст вашего вопроса. –
_ «Как мне сделать это с помощью оператора =?» А? Чего вы пытаетесь достичь? –