PVD -- 仮想デストラクタを用意(Provide Virtual Destructor)
C++ 検査 への移動
説明
PVD では、仮想メソッドを持ち、非仮想デストラクタがあるかデストラクタがないクラスを検出します。
クラスに少なくとも 1 つ仮想関数がある場合は、デストラクタを仮想として宣言する必要があります。 仮想関数があるということは、そのクラスが派生クラスに対するインターフェイスの役目を果たすためのものであるということです。そしてその場合には、派生クラスのオブジェクトは基底クラスのポインタを通じて破棄することができます。
基底クラスのデストラクタが仮想でなければ、派生クラスのデストラクタは呼び出されず、派生クラスのオブジェクトが所有しているリソースが解放されないなどの悪影響が生じる可能性があります。
誤った例
class Base{
public:
virtual method() = 0;
};
正しい例
class Base{
public:
virtual method() = 0;
virtual ~Base(){};
};