Операция копирования изменяет представитель данных исходного объекта
Этот дефект возникает, когда конструктор копирования или оператор назначения копирования изменяет изменяемый представитель данных своего исходного операнда.
Для образца, этот конструктор копирования A изменяет представитель данных m его исходного операнда other:
class A {
mutable int m;
public:
...
A(const A &other) : m(other.m) {
other.m = 0; //Modification of source
}
}Операция копирования с конструктором копирования (или оператором назначения копирования):
className new_object = old_object; //Calls copy constructor of className
old_object на операнд назначения new_object. После операции вы ожидаете, что операнд назначения будет копией немодифицированного операнда источника. Если исходный операнд изменяется во время копирования, это предположение нарушается.Не изменяйте исходный операнд в операции копирования.
Если вы изменяете исходный операнд в конструкторе копирования для реализации операции перемещения, используйте вместо этого конструктор перемещения. Перемещение конструкторов определяется в стандарте C++ 11 и более поздних версиях.
| Группа: Объектно-ориентированная |
| Язык: C++ |
| По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки
: COPY_MODIFYING_SOURCE |
| Влияние: Средний |