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++ |
| По умолчанию: Off |
Синтаксис командной строки: RETURN_NOT_REF_TO_THIS |
| Влияние: Низкое |