Tamflexの貯蔵庫

やる気のない備忘録

【c++11】warning: deleting object of polymorphic class type ‘Derived’ which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]

自作クラスでdeleteでデストラクタを呼ぼうとしたら以下のような警告が出た。

warning: deleting object of polymorphic class type ‘Derived’ which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
delete v;

ここに対処方法が書いてあった。

またここに警告の意味が書いてあった。
VerboseDiagnostics - GCC Wiki

どうやら基底クラスか派生クラスのどちらかのデストラクタを仮想化すれば解決するらしい。
すなわち

class Base {
 ~Base(); // Non-virtual destructor.
};

class Derived : public Base {
 virtual ~Derived(); // Virtual destructor.
};

とするか

class Base {
 virtual ~Base();
};

class Derived : public Base {
 ~Derived();
};

とすれば解決する。