C++虚析构函数
一般来说,用new运算符动态生成的对象都是通过delete指向它的指针来释放的,例如
Base1 *p = new Base1;
delete p;
但是我们有时会让一个基类指针指向用new运算符动态生成的派生类对象,例如以下程序:
#include <iostream>
using namespace std;
//基类Base1
class Base1
{
public:
Base1()
{
cout << "Base1构造函数" << endl;
}
~Base1()
{
cout << "~Base1析构函数" << endl;
}
};
//派生类Base2
class Base2 : public Base1
{
public:
Base2()
{
cout << "Base2构造函数" << endl;
}
~Base2()
{
cout << "~Base2析构函数" << endl;
}
};
int main()
{
//基类指针指向用new运算符动态生成的派生类对象
Base1 *base1=new Base2;
delete base1;
return 0;
}
运行结果:
显然,语句“ delete base1; "只引发了基类Base1