为什么我们需要一个具有动态内存的虚拟析构函数?

use*_*483 -3 c++ virtual-destructor

当我们有继承时,为什么我们需要一个带有动态变量的虚拟析构函数?在静态/动态情况下析构函数的执行顺序是什么?最底层派生类的析构函数不会总是先执行吗?

Joh*_*ing 5

当您尝试通过基类指针访问派生类对象时,需要在基类中使用析构函数。virtualdelete

庞特案例:

class Foo
{
public:
  virtual ~Foo(){};
};

class Bar : public Foo
{
public:
  ~Bar() { std::cout << "Bye-Bye, Bar"; }
};

int main()
{
  Foo* f = new Bar;
  delete f;
}
Run Code Online (Sandbox Code Playgroud)

virtual如果基类中没有析构函数,Bar则这里不会调用 的析构函数。