虚析构函数

虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象。

虚析构函数使用

  1. class Shape
  2. {
  3. public:
  4. Shape(); // 构造函数不能是虚函数
  5. virtual double calcArea();
  6. virtual ~Shape(); // 虚析构函数
  7. };
  8. class Circle : public Shape // 圆形类
  9. {
  10. public:
  11. virtual double calcArea();
  12. ...
  13. };
  14. int main()
  15. {
  16. Shape * shape1 = new Circle(4.0);
  17. shape1->calcArea();
  18. delete shape1; // 因为Shape有虚析构函数,所以delete释放内存时,先调用子类析构函数,再调用基类析构函数,防止内存泄漏。
  19. shape1 = NULL;
  20. return 0
  21. }