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 |
| Удар: низко |