析构函数设为虚函数的作用:
解释:在类的继承中,如果有基类指针指向派生类,那么用基类指针delete时,如果不定义成虚函数,派生类中派生的那部分无法析构。
例:
#include
#include
class
{
public:
A();
virtual
};
A::A()
{
}
A::~A()
{
printf("Delete
}
class
{
public:
B();
~B();
};
B::B()
{
B::~B()
{
printf("Delete
}
int
{
A
delete
return
}
输出结果为:Delete
如果把A的virtual去掉:那就变成了Delete
因此在类的继承体系中,基类的析构函数不声明为虚函数容易造成内存泄漏。
// virtualDestructor.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
class A
{
public:
A();
//virtual
~A();
};
A::A()
{
}
A::~A()
{
printf("Delete class AP\n");
}
class B : public A
{
public:
B();
~B();
};
B::B()
{ }
B::~B()
{
printf("Delete class BP\n");
}
int main(int argc, char* argv[])
{
A *b=new B;
delete b;
return 0;
}
/*
Delete class AP
Press any key to continue
*/