Операция копирования изменяет элемент данных исходного объекта
Этот дефект возникает, когда конструктор копирования или оператор назначения копирования изменяет изменяемый элемент данных своего исходного операнда.
Например, этот конструктор копирования 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++ |
| По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода |
Синтаксис командной строки:
COPY_MODIFYING_SOURCE |
| Воздействие: среднее |