以下のこの例は、派生クラスがコピーされないようにする方法を示しています。これは、コピーコンストラクタとコピー代入演算子の両方が宣言されている基本クラスに基づいています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
ですか?