今天讨论个比较有意思的话题:析构函数是不是必须要为虚函数?

先说答案:

析构函数可以是虚函数,也可以不是虚函数。

再说原因:

析构函数为虚函数的情况:继承

当父类指针释放子类对象时,如果父类的析构函数不是虚函数,子类的析构函数可能调不到(指针类型是父类,所以直接调用父类的析构函数),从而导致内存泄漏,这类代码实在太简单,这里就不再贴实例代码了。

既然这样,是不是C++默认的析构函数设计成虚函数更合适?答案是否定的,大家都知道,虚函数需要额外的虚函数表和虚表指针,占用额外的内存,如果类的设计不考虑继承,把析构函数设置成虚函数无疑是浪费内存。

C++学习之-析构函数必须为虚函数吗?_C++11

总结下:将基类的析构函数声明为虚函数..