今天写程序,遇到了一大片内存泄漏。调试了好长时间,才发现是析构函数的原因。
例:
1 class Base
2 {
3 public:
4 Base(){};
5 virtual ~
Base(){
6 // 释放内存
7 };
8 };
9
10 class Child:
public Base
11 {
12 public:
13 Child(){};
14 virtual ~
Child(){
15 // 释放内存
16 };
17 };
18
19 int main()
20 {
21 Base* a =
new Child;
22 delete a;
23 return 0;
24 }
如果Base类的析构函数不是虚函数,那么delete a;时,因为a时Base类型指针,只会调用父类的析构函数,Child类的析构函数不会被调用。那么a指针对象的子类释放内存的操作就不会被执行,造成内存泄漏。
转载于:https://www.cnblogs.com/Ray1024/p/5164834.html