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