Этот вопрос отличается от "Когда/почему я должен использовать деструктор virtual?".
struct B {
virtual void foo ();
~B() {} // <--- not virtual
};
struct D : B {
virtual void foo ();
~D() {}
};
B *p = new D;
delete p; // D::~D() is not called
Вопросы
- Может ли это быть классифицировано как поведение undefined (мы знаем, что
~D()не будет вызываться наверняка)? - Что делать, если
~D()пуст. Это повлияет на код каким-либо образом? - При использовании
new[]/delete[]сB* p;,~D(), безусловно, не будет получить вызов, независимо отvirtualness деструктора. Это поведение undefined или четко определенное поведение?