Effective c++ 条款7 为多态基类声明virtual析构函数
作者:互联网
- 问题:
- 当一个base class指针指向子类对象,若base class带着一个non-virtual析构函数,此时delete base class指针时,只会释放掉base class对象的资源,并不会释放drived class对象的资源,最终造成内存泄漏
- 解决:
- 任何带有virtual函数的class都应有一个virtual析构函数
- 虚函数实现原理:
- 每个含有virtual函数的class都有指向虚函数表的指针(vptr)、虚函数表(vtbl)
- 这个vptr指向对应class的vtbl
- 当对象调用某个virtual函数时,编译器则根据对象的vptr实现动态绑定,找到对应class的vtbl,再在vtbl中寻找合适的函数指针
- 只有当class内含有至少一个virtual函数时,才为它声明virtual析构函数
- string和stl容器的析构函数都为non-virtual,最好不要作为base class使用
- vtbl和vptr都会占用额外内存,因此不作为base class的class不要声明析构函数为non-virtual
标签:函数,Effective,vtbl,多态,c++,base,virtual,析构,class 来源: https://www.cnblogs.com/chenglixue/p/16389680.html