简要
C++ 的多态是它的重要特征之一。而多态的实现主要是通过基类的指针指向子类的对象。 而这个过程中容易出现一个问题就是,在delete 父类的指针时, 子类的对象怎么处理。
基类析构函数析不为虚函数
代码示例
#include <QCoreApplication>
#include <iostream>
using namespace std;
class A {
public:
~A();
void show();
};
A::~A()
{
cout << "A::~A()" << endl;
}
void A::show()
{
cout << "this is A show()" << endl;
}
class B:public A {
public:
~B();
void show();
};
B::~B()
{
cout << "B::~B()" << endl;
}
void B::show()
{
cout << "this is B show()" << endl;
}
int main()
{
A *a = new B();
a->show();
delete a;
a = NULL;
}
效果图
基类析构函数析为虚函数
代码示例
#include <QCoreApplication>
#include <iostream>
using namespace std;
class A {
public:
virtual ~A();
void show();
};
A::~A()
{
cout << "A::~A()" << endl;
}
void A::show()
{
cout << "this is A show()" << endl;
}
class B:public A {
public:
~B();
void show();
};
B::~B()
{
cout << "B::~B()" << endl;
}
void B::show()
{
cout << "this is B show()" << endl;
}
int main()
{
A *a = new B();
a->show();
delete a;
a = NULL;
}
效果图
所以说,当基类为的析构函数为虚函数时,才能更好的释放内存资源, 防止内存泄漏。