标签:函数 Effective vtbl 多态 c++ base virtual 析构 class
- 问题:
- 当一个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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。