More Effective C++之24

来源:互联网 发布:mac使用锐捷客户端 编辑:程序博客网 时间:2024/05/17 00:55
条款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都是需要代价的,我的观点是除非必要,否则不用。