why?
请看下面代码
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Base{
public:
Base(){cout<<"Base 构造"<<endl;}
~Base(){cout<<"Base 析构"<<endl;}
};
class Deriver:public Base{
public:
Deriver(){cout<<"Deriver 构造"<<endl;}
~Deriver(){cout<<"Deriver 析构"<<endl;}
};
int main(){
Base* p=new Deriver;
delete p;
return 0;
}
先猜一猜运行结果
Deriver的析构函数并没有被调用。
但是我们把基类构造函数定义为虚函数,运行之后
为什么会这样呢,请看编译代码!!!
重点在虚函数表,我们可以看见在虚函数表中,有一个deleting destructor,相当于重写了delete 函数,会根据指向的对象调用对应的delete函数。