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