结论:
虚析构的目的为了防止内存泄漏;
前提:
基类指针指向派生类对象;
原因:
析构时,先析构派生类,再析构基类。如果不是虚析构,那么直接会析构基类,忽略派生类的析构函数。尤其当派生类成员变量中含有指针时,就会导致内存泄漏;
#include <iostream>
class Base
{
public:
Base() { cout << "create Base" << endl; }
~Base() { cout << "release Base" << endl; }
};
class Derived : public Base
{
public:
Derived() {cout << "create Derived" << endl; }
~Derived() { cout << "release Derived" << endl; }
};
int main()
{
Base *p = new Derived();
delete p;
p = nullptr;
return 0;
}
※※ Base *p = new Derived() //基类指针指向派生类对象
非虚析构:
虚析构: