次の2つのクラスを検討します。
struct Base
{
virtual ~Base()
{
}
virtual void foo() = 0;
};
struct Derived : public Base
{
virtual void foo()
{
}
};
次の原因で未定義の動作が発生していますか?
Base *obj = new Derived;
delete obj;
?
追加の質問:メソッドが仮想として宣言され、派生クラスでは仮想であるのはなぜですか(派生クラスで仮想キーワードが使用されていない場合でも)が、デストラクタには当てはまりませんか?