Google C++ Style Guideにも書かれているように、クラスに仮想メンバー関数が存在する場合、そのクラスのデストラクタは virtual でなくてはなりません (If your class has virtual methods, its destructor should be virtual.)。 ただその理由は若干複雑です。理由が説明できないとコードレビューで問題を指摘する際に困りますし、逆に必要ないのに 「デストラクタには常に virtual をつけろ」と言われた場合に反論できなくて困ることになります。 ルールの前提 virtual なメソッドがあるなら、子クラスのポインタは必ず親クラスのポインタとして使用される そもそも virtual なメソッド (仮想メンバー関数)がクラスに定義されているということは、そのクラスは継承した子クラスを作成し、その子クラスのインスタ