У меня проблема с устаревшей версией с момента создания С++ 11 конструктора копирования и оператора присваивания копии, когда есть определяемый пользователем деструктор.
Для большинства достаточно простых классов конструкторы, операторы и деструкторы, созданные по умолчанию, являются точными. Рассмотрим следующие причины для объявления деструктора:
-
Создание тривиального деструктора виртуального в базовом классе:
// header class Base1 { public: virtual ~Base1() = default; }; class Base2 { public: virtual ~Base2(); }; // source Base2::~Base2() = default;Все ли 4 копии и перемещение специальных методов будут сгенерированы компилятором в этих случаях? Если да, то я думаю, что это нормально, и нет необходимости усложнять
Base1илиBase2. -
Печать отладочного сообщения в деструкторе:
// header class D { public: ~D(); }; // source D::~D() { #ifdef DEBUG_THIS std::cout << "D was destructed." << std::endl; #endif }Я считаю, что в этом случае будет создан экземпляр-конструктор и оператор присваивания; но переместить конструктор и оператор присваивания не будет. Я хочу избежать использования устаревшего генерирования по умолчанию и отключения копирования
D. Я также хочу избежать наводненияDобъявлениями 4deleted. Достаточно ли отключить только один конструктор экземпляра? Это хороший стиль?