は、なぜ、すべてのデストラクタ、~D()
、~C()
、~B()
、~A()
は、以下の例では呼ばれていますか? A
のこと:派生クラスのデストラクタが非仮想である場合、ベースクラスのデストラクタが派生オブジェクトで呼び出されるのはなぜですか?
一つだけの仮想デストラクタがあります。ここで
コードです:A
のデストラクタがvirtual
宣言されると
#include<iostream>
using namespace std;
class A
{
public:
virtual ~A()
{
cout<<"destruct A\n";
}
};
class B:public A
{
public:
~B()
{
cout<<"destruct B\n";
}
};
class C:public B
{
public:
~C()
{
cout<<"destruct C\n";
}
};
class D:public C
{
public:
~D()
{
cout<<"destruct D\n";
}
};
int main()
{
A* ptr = new D();
delete ptr;
return 0;
}
これが、言語の規則が何を言いたいのかということなのです。 – juanchopanza