关闭

More Effective C++之24

499人阅读 评论(0) 收藏 举报
条款24:了解virtual functions、multiple inheritance、virtual base classes、runtime type identification的成本
Vtbl是virtual tables、vptrs是virtual table pointers。这在《Inside C++ Object Model》里面有很详尽的描述,所以不需要这里多写什么。《Inside C++ Object Model》有相关性能测试报告,可以作为参考。当我们将虚函数声明成inline的时候,往往不要抱有幻想,编译器往往会忽略,因为如果这一设定生效,如果所有虚函数都是inline,那如何生成vtbl?而且inline是编译期行为,virtual是执行期行为。所以要不inline,要不virtual。
多重继承其实并不是好的抽象办法,我最痛恨的一个特性。建议除非天塌下来,否则不要用。这样也可以同时回避virtual base classes。runtime type identification并不是常用的特性,相对而言,这可以忽略,只要VC6默认就是不支持的。
总结起来说,virtual functions、multiple inheritance、virtual base classes、runtime type identification都是需要代价的,我的观点是除非必要,否则不用。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:612553次
    • 积分:9788
    • 等级:
    • 排名:第1782名
    • 原创:340篇
    • 转载:141篇
    • 译文:0篇
    • 评论:69条
    最新评论