这个问题与'何时/为什么应该使用虚拟析构函数?'不同。
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
问题:
- 这是否可以被归类为未定义行为(我们知道
~D()
肯定不会被调用)? - 如果
~D()
是空的,它会以任何方式影响代码吗? - 使用
B* p;
和new[]
/delete[]
后,无论析构函数是否虚拟,~D()
都肯定不会被调用。这是未定义行为还是良好定义行为?