C++中为什么析构函数是虚函数

如果基类的析构函数不是虚函数,在特定情况下会导致派生来无法被析构。

情况1:用派生类类型指针绑定派生类实例,析构的时候,不管基类析构函数是不是虚函数,都会正常析构

情况2:用基类类型指针绑定派生类实例,析构的时候,如果基类析构函数不是虚函数,则只会析构基类,不会析构派生类对象,从而造成内存泄漏。为什么会出现这种现象呢,个人认为析构的时候如果没有虚函数的动态绑定功能,就只根据指针的类型来进行的,而不是根据指针绑定的对象来进行,所以只是调用了基类的析构函数;如果基类的析构函数是虚函数,则析构的时候就要根据指针绑定的对象来调用对应的析构函数了。

上一篇文章说到,虚函数在派生类和基类中需要函数名字和参数表都相同,但是这里的虚析构函数显然在每个类中是不一样的,可能是析构函数比较特殊吧。另外构造函数不可以是虚函数,为什么呢,因为类的虚函数表指针是在构造函数中初始化的,这时候入股构造函数本身是虚函数,有应该有谁来初始化它的虚函数指针呢,所以构造函数不能是虚函数。构造函数和析构函数中也不能调用虚函数,调用了也没用,一个是虚函数表指针还没有初始化好,一个是可能虚函数已经被析构了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章