GeekBand C++面向对象高级编程(下)(第四周):没有虚析构

在C++中,如果一个类是作为父类存在时,那么析构函数必须是虚析构函数,否则在对其子类进行析构时,只会释放其父类的成分,对子类的成分置之不理

原来一直以为在没有显示的定义析构函数的情况下,编译器会自动生成虚析构函数进行优化,但是通过今天的作业却发现不是这么一回事。
众所周知,存在虚函数的类计算大小的时候必然要计算其虚表指针的大小,即使是一个虚基类,同样也会有大小,这就是因为虚表指针的存在。
但是在今天的作业中,笔者尝试着将父类的虚函数注释掉,然后发现父类不再存在虚表指针了。
这是一个值得警惕的情况,编译器虽然有时候会对代码进行优化,但还是得becare

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容