2

私は3つのクラスを持っています。

class Son : public Father;

class Father : public Grandfather;

Father抽象的であり、そうですGrandfatherSon抽象的ではありません。

私がこれを行う場合:

Son* son = new Son();

そしてこれを行います:

delete(son)

FatherとのデストラクタGrandfatherが呼び出されていることを確認するにはどうすればよいですか?

4

1 に答える 1

3

ポインタへの親クラスのデストラクタは、何があっても呼び出されます。

ただし、最上位クラスのデストラクタを作成する必要がvirtualあります。これにより、へのポインタを削除して、Grandfatherすべてのサブクラスのデストラクタも呼び出されるようにすることができます。そうしないと、未定義の動作につながりますが、これは常に悪いことです。

関数がvirtualになると、派生ツリー全体で仮想化され、子クラスでマークする必要がなくなります。ただし、通常はそうするのが良い形式であり、コードを読むのに役立ちます。

于 2012-10-20T23:31:47.273 に答える