虚析构函数
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "call A()" << endl; }
~A() { cout << "call ~A()"; }
};
class B:public A {
char *buf;
public:
B() { buf = new char[100]; cout << "call B()" << endl; }
~B() { delete []buf; cout << "call ~B()" << endl; }
};
int main(void)
{
A *p = new B;
delete p;
return 0;
}
输出:
call A()
call B()
call ~A()
并没有调用~B(), 从而导致100字节的内存没有被释放。
将A的析构函数说明为虚函数可解决此问题。
#include <iostream>
using namespace std;
class A {
public:
A() { cout << "call A()" << endl; }
virtual ~A() { cout << "call ~A()"; }
};
class B:public A {
char *buf;
public:
B() { buf = new char[100]; cout << "call B()" << endl; }
~B() { delete []buf; cout << "call ~B()" << endl; }
};
int main(void)
{
A *p = new B;
delete p;
return 0;
}
输出:
call A()
call B()
call ~B()
call ~A()

浙公网安备 33010602011771号