本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。
其实该条款在任何一门C++课堂上老师都会讲到,把基类的析构函数申明为virtual的,这样一来在接口释放时候子类才能被正真析构。
1、 先来看看编译器是如何帮我们实现的,对于基类析构函数不为虚函数的情况
代码和编译生成的汇编如下:
将父类的袖狗函数申明为虚函数以后
可以看到原来调用基类析构函数的地方变成了call eax,很明显是一个虚函数调用,跟进去一看就是子类的析构函数。
2、 第一个问题相信大部分人都没问题,但是是不是所有基类的析构函数都申明为虚函数呢?当然不是,该条款标题写的很明白只是为多态基类申明。因为有的时候会将一个类转换为一个特定的结构,如果定义了虚函数,那么这个类的开始地方就不再是第一个成员变量了,而是虚表的位置了,所以这么赋值就会出错。但是我在想这种用法其实不是很经常,总之不要画蛇添足吧。
3、 在C++中大家都习惯使用虚函数来实现接口,而且还是纯虚函数,通过一个抽象来来实现接口,在这里需要注意,如果析构函数是纯虚函数,必须有实现,否则会出现连接错误,代码如下:
本文发布于:2024-01-30 23:46:40,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170662960123706.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |