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

Ответы на вопрос(4)

Ваш ответ на вопрос