【发布时间】:2018-02-24 03:41:00
【问题描述】:
#include<iostream>
using namespace std;
class Mahesh
{
public:
Mahesh(){
cout<<"Base Constructor is called at here"<<endl<<endl;
}
virtual ~ Mahesh()
{
cout<<"Base Destructor is called"<<endl<<endl;
}
};
class Purnima:public Mahesh
{
public:
Purnima()
{
cout<<"Derived class constructor"<<endl<<endl;
}
~Purnima(){
cout<<"Derived class Destructor"<<endl<<endl;
}
};
int main()
{
Mahesh *m1;
Purnima p1;
m1=&p1;
return 0;
}
我的问题是,如果我不在析构函数前面写关键字virtual,那么上面的代码就可以正常工作,那么为什么要使用虚拟析构函数呢?
【问题讨论】:
-
重复都不合适。答案是
virtual是继承的,不管你是否在派生的析构函数中重新指定。 -
你甚至从不以多态方式调用析构函数。您实际上是在测试销毁派生类会调用父析构函数和派生析构函数。
-
如果你写
m1 = new Purnima; delete m1;,虚拟析构函数会有所不同 -
在派生类中省略关键字没有区别:stackoverflow.com/questions/4895294/… 但在您的示例中,您甚至不需要在基类中使用 virtual。
标签: c++ virtual destructor