Этот вопрос отличается от "Когда/почему я должен использовать деструктор 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()
, безусловно, не будет получить вызов, независимо отvirtual
ness деструктора. Это поведение undefined или четко определенное поведение?