虚函数、纯虚函数、虚函数表、虚析构函数(三)

上一篇说到了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掉的是指向父类的指针,子类的对象还是仍然存在,这是很危险的,子类的那一片内存空间并未被释放。

想要同时调用子类的析构函数,我们需要将父类的析构函数设置成为虚析构函数

猜你喜欢

转载自www.cnblogs.com/leoncumt/p/10491814.html