Этот пример ниже показывает, как предотвратить копирование производного класса. Он основан на базовом классе, в котором конструктор копирования и оператор присваивания копии объявлены закрытыми
.
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
не объявлен как виртуальный.
Ранее я узнал, что
виртуальными
. виртуальными
. В этом примере деструктор для Uncopyable
не является виртуальным
, но наследуется от. Кажется, это противоречит мудрости, которую я усвоил ранее.
Когда и почему деструктор в базовом классе НЕ должен определяться как виртуальный
?