首页 » 默认分类 » 正文

[c++] 为什么使用虚析构函数?

什么时候应该使用虚析构函数?

先说结论,在你的类有可能作为基类时。

例子

#include <iostream>

using namespace std;

class A
{
public:
  virtual ~A () { cout << "~A()" << endl;}

private:
  /* data */
};

class B: public A
{
public:
  ~B () { cout << "~B()" << endl;} 

private:
  /* data */
};

int main(int argc, char *argv[])
{
  A* c = new B;
  delete c;

  return 0;
}

执行结果

$:g++ -Wall --std=c++17 -o main
$:./main
~B()
~A()

差别
如果A类没有虚析构函数的话,执行结果会是这样

$:g++ -Wall --std=c++17 -o main
$:./main
~A()

结论

当你写的类有可能作为基类时,应当都加上virtual。

发表评论