如果类被设计成能被继承,析构函数必须是虚函数。否则可以不为虚函数。析构函数写成虚函数主要是为了在实现多态时不造成内存泄露。
class A
{
public:
A() {cout<<"A Constructor\n";}
virtual ~A() {cout<<"A Destructor\n";}
};
class B:public A
{
public:
B() { cout<<"B Constructor\n";}
~B() { cout<<"B Destructor\n";}
};
int main()
{
A *pa=new B();
delete pa;
return 0;
}
A Constructor
B Constructor
B Destructor
A Destructor
如果不是虚析构的
class A
{
public:
A() {cout<<"A Constructor\n";}
~A() {cout<<"A Destructor\n";}
};
class B:public A
{
public:
B() { cout<<"B Constructor\n";}
~B() { cout<<"B Destructor\n";}
};
int main()
{
A *pa=new B();
delete pa;
return 0;
}
A Constructor
B Constructor
A Destructor
造成了内存泄露