В этом примере ниже показано, как предотвратить копирование производного класса. Он основан на базовом классе, где объявлены как конструктор копирования, так и оператор назначения копии private
.
class Uncopyable
{
protected:
// allow construction and destruction of derived objects...
Uncopyable() {}
~Uncopyable() {}
private:
// but prevent copying...
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};
Мы можем использовать этот класс в сочетании с частным наследованием, чтобы сделать классы недоступными:
class derived: private Uncopyable
{...};
Обратите внимание, что деструктор в классе Uncopyable
не объявлен как virtual.
Раньше я узнал, что
- Деструкторы в базовых классах должны быть
virtual
. - Деструкторы в не-базовых классах не должны быть сделаны
virtual
.
В этом примере деструктор для Uncopyable
не virtual
, но он унаследован. Это, похоже, противоречит мудрости, которую я изучил ранее.
Когда и почему деструктор в базовом классе НЕ определяется как virtual
?