operator= метод не возвращает указатель на текущий объект
Этот дефект возникает, когда операторы назначения, такие как operator= и operator+= не возвращать ссылку на *this, где this является указателем на текущий объект. Если operator= метод не возвращается *this, это означает, что a=b или a.operator=(b) не возвращает цессионария a после назначения.
Например:
Оператор возвращает свой параметр вместо ссылки на текущий объект.
То есть у оператора есть форма MyClass & operator=(const MyClass & rhs) { ... return rhs; } вместо MyClass & operator=(const MyClass & rhs) { ... return *this; }.
Оператор возвращает значение, а не ссылку.
То есть у оператора есть форма MyClass operator=(const MyClass & rhs) { ... return *this; } вместо MyClass & operator=(const MyClass & rhs) { ... return *this; }.
Пользователи обычно ожидают, что назначения объектов будут вести себя так же, как назначения между встроенными типами, и ожидают, что назначение вернет исполнителя. Например, правое ассоциативное назначение цепочки a=b=c требует, чтобы b=c вернуть цессионария b после назначения. Если оператор назначения ведет себя иначе, пользователи класса могут столкнуться с неожиданными последствиями.
Непредвиденные последствия возникают, когда назначение является частью другого оператора. Например:
Если operator= возвращает его параметр вместо ссылки на текущий объект, назначение a=b прибыль b вместо a. Если operator= выполняет частичное назначение элементов данных после назначения a=b, члены данных a и b отличаются друг от друга. Если вы или другой пользователь вашего класса прочитали элементы данных возвращаемого значения и ожидаете элементы данных a, у вас могут быть неожиданные результаты. Пример см. в разделе Возвращаемое значение оператора = Тот же, что и аргумент.
Если operator= возврат метода *this по значению, а не по ссылке, копия *this возвращается. Если предполагается изменить результат присвоения с помощью оператора, например, (a=b).modifyValue(), вы изменяете копию a вместо a сам.
Вернуть *this от операторов назначения.
| Группа: Объектно-ориентированная |
| Язык: C++ |
| По умолчанию: Откл. |
Синтаксис командной строки: RETURN_NOT_REF_TO_THIS |
| Воздействие: Низкий |