#include <iostream>
using namespace std;
class Person{
private:
int k;
public:
Person(int x):k(x){};
Person(){};
~Person()
{
cout << "~Person()" << endl;
t++;
}
};
class A_person:public Person{
private:
int s;
public:
A_person(){};
~A_person()
{
cout << "~A_person()" << endl;
}
};
int main()
{
Person *A = new A_person;
delete A;
}
首先来看这段代码的运行结果:
这是把析构函数声明为虚函数的情况:
#include <iostream>
using namespace std;
int t = 0;
class Person{
private:
int k;
public:
Person(int x):k(x){};
Person(){};
virtual ~Person()
{
cout << "~Person()" << endl;
t++;
}
};
class A_person:public Person{
private:
int s;
public:
A_person(){};
~A_person()
{
cout << "~A_person()" << endl;
}
};
int main()
{
Person *A = new A_person;
delete A;
}
这是运行结果:
由此可以看出区别:
不声明为虚函数是只析构了继承的哪一部分,而派生类的那一部分不会被析构,会造成内存泄漏。