Effective C++学习笔记 (7)

阅读: 评论:0

Effective C++学习笔记 (7)

Effective C++学习笔记 (7)

本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。

条款7:为多态基类申明virtual析构函数

         其实该条款在任何一门C++课堂上老师都会讲到,把基类的析构函数申明为virtual的,这样一来在接口释放时候子类才能被正真析构。

1、  先来看看编译器是如何帮我们实现的,对于基类析构函数不为虚函数的情况

代码和编译生成的汇编如下:



将父类的袖狗函数申明为虚函数以后


可以看到原来调用基类析构函数的地方变成了call eax,很明显是一个虚函数调用,跟进去一看就是子类的析构函数。

2、  第一个问题相信大部分人都没问题,但是是不是所有基类的析构函数都申明为虚函数呢?当然不是,该条款标题写的很明白只是为多态基类申明。因为有的时候会将一个类转换为一个特定的结构,如果定义了虚函数,那么这个类的开始地方就不再是第一个成员变量了,而是虚表的位置了,所以这么赋值就会出错。但是我在想这种用法其实不是很经常,总之不要画蛇添足吧。

3、  在C++中大家都习惯使用虚函数来实现接口,而且还是纯虚函数,通过一个抽象来来实现接口,在这里需要注意,如果析构函数是纯虚函数,必须有实现,否则会出现连接错误,代码如下:



本文发布于:2024-01-30 23:46:40,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170662960123706.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:学习笔记   Effective
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23