#include <string>
#include <iostream>
using namespace std;
class A {
private:
int a;
public:
A() {
cout << "A()" << endl;
}
~A() {
cout << "~A()" << endl;
}
};
class B :public A {
public:
int b;
B(){
cout << "B()" << endl;
}
~B() {
cout << "~B()" << endl;
}
};
int main() {
A* pa = new B();
delete pa;
int a = 0;
}
输出:
A()
B()
~A()
如果我们把A的析构函数声明成虚拟函数
#include <string>
#include <iostream>
using namespace std;
class A {
private:
int a;
public:
A() {
cout << "A()" << endl;
}
virtual ~A() {
cout << "~A()" << endl;
}
};
class B :public A {
public:
int b;
B(){
cout << "B()" << endl;
}
~B() {
cout << "~B()" << endl;
}
};
int main() {
A* pa = new B();
delete pa;
int a = 0;
}
这样就会得到我们想要的结果:
A()
B()
~B()
~A()