in 基本クラスにはpure virtual destructor定義が必要です。そうしないと、コンパイラはリンク時に派生クラス デストラクタから基本クラス デストラクタへの呼び出しを生成し、リンク エラーが発生します。
以下のように、基本クラス内で純粋仮想デストラクタを定義しようとしました。
class base
{
public:
base()
{
cout << "constructor in base class\n";
}
virtual ~base()=0
{}
};
これにより、コンパイルエラーが発生しました:
エラー: 関数定義の純粋指定子
次に、以下のように基本クラスの外で関数を定義しようとしました:
class base
{
public:
base()
{
cout << "constructor in base class\n";
}
virtual ~base()=0;
};
base::~base()
{
}
これにより、コンパイル エラーが解消され、私の理解どおりに動作します。
しかし、私の質問は、基本クラスの外部で純粋仮想デストラクタを定義すると、コンパイル エラーがどのように削除されるのでしょうか?