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