Проблема с конструктором копирования и оператором копирования-назначения заключается в том, что компилятор автоматически генерирует реализации, если они не объявлены явно.
Это может легко вызвать непреднамеренные проблемы.Если класс имеет нетривиальный деструктор, он почти всегда должен предоставлять свои собственные реализации для конструктора копирования и оператора копирования-назначения (это Закон Большой Тройки ), так как компилятор по умолчанию -сгенерированные обычно делают неправильные вещи.
Нарушение закона большой тройки часто приводит к ошибкам, таким как двойное освобождение членов данных и повреждение памяти.Нередко возникают ошибки такого рода, потому что автору класса никогда не приходится задумываться о поведении копирования, а потребителям легко непреднамеренно копировать объекты.
Если автор класса не задумывался окак правильно копировать экземпляры этого класса (или, если у класса нет тривиального деструктора), тогда лучше явно запретить копирование, чтобы избежать потенциальных проблем.Реализация возможности копирования может быть отложена до тех пор, пока в этом не будет реальной необходимости.