上一篇说到了virtual关键字的使用范围以及虚函数。
先上一段代码:
1 #include "pch.h" 2 #include <iostream> 3 using namespace std; 4 5 class Father { 6 public: 7 Father() { 8 cout << "我是父类的构造函数" << endl; 9 } 10 ~Father() { 11 cout << "~我是父类的析构函数" << endl; 12 } 13 }; 14 class Child1 : public Father { 15 public: 16 Child1() { 17 cout << "我是子类1的构造函数" << endl; 18 } 19 ~Child1() { 20 cout << "我是子类1的析构函数" << endl; 21 } 22 }; 23 24 25 int main() 26 { 27 Father *fa = new Child1(); 28 delete fa; 29 }
输出是:
我是父类的构造函数
我是子类1的构造函数
~我是父类的析构函数
可见子类的析构函数并未被调用,因为delete掉的是指向父类的指针,子类的对象还是仍然存在,这是很危险的,子类的那一片内存空间并未被释放。
想要同时调用子类的析构函数,我们需要将父类的析构函数设置成为虚析构函数