Метод operator=
не возвращает указатель на текущий объект
*this
, не возвращенный в оператор присваивания копии, происходит, когда операторы присваивания, такие как 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 |
Влияние: низко |