码迷,mamicode.com
首页 > 编程语言 > 详细

C++虚函数的缺陷

时间:2014-10-13 04:10:19      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   ar   strong   文件   sp   

MFC中的消息机制没有采用C++中的虚函数机制,原因是消息太多,虚函数内存开销太大。在Qt中也没有采用C++中的虚函数机制,原因与此相同,其实这里还有更深层次上的原因,大体说来,多态的底层实现机制只有两种:
1. 一种是按照名称查表
2. 一种是按照位置查表
两种方式各有利弊,而C++的虚函数机制无条件的采用了后者,导致的问题就是在子类很少重载基类实现的时候开销太大,再加上象界面编程这样子类众多的情况,基本上C++的虚函数机制就废掉了,于是各家库的编写者就只好自谋生路了,说到底,这确实是C++语言本身的缺陷。

参考:http://blog.csdn.net/oowgsoo/article/details/1529411
----------------------------------------------------------------------------------
感叹一句,还真的是自谋生路啊,而且是不约而同的,Delphi就采用了dynamic机制,以减小子类的内存开销,而且大多数是不必要的虚函数开销。

在这些方法里:
1. VC++使用一组结构体的宏定义来实现消息映射,从而解决虚函数的缺陷。
2. Qt的信号槽机制其实就是按照名称查表。
3. Delphi则通过dynamic机制从编译器的角度来解决这个问题。这些方法里,自然是Delphi的方法最简洁方便。

----------------------------------------------------------------------------------
以前一直不明白为什么说Delphi语法优美,现在有2点体会,好像是这么回事:
1. C++的宏定义表面上是个好东西,也确实是个好东西,因为可以做无穷无尽的扩展,但用它就会把源代码搞的很复杂,你完全都不知道编译器/类库会把你的源代码替换成什么东西。VC++就是靠这套方法实现消息机制的,QT更夸张,每个文件都要生成moc文件才能真正进行编译。而Delphi的源代码就是源代码,对所有人/所有库都平等,没有什么隐晦的代码。
2.

C++虚函数的缺陷

标签:style   blog   http   color   使用   ar   strong   文件   sp   

原文地址:http://www.cnblogs.com/findumars/p/4021383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!