Самый краткий способ отключить копирование класса в C ++ 11
У меня есть проблема, связанная с устаревшим, так как C ++ 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
деклараций. Достаточно ли отключить только один конструктор копирования? Это хороший стиль?