您的位置:首页 > 编程语言 > C语言/C++

读书笔记MoreEffectiveC++(24)

2015-07-28 11:05 204 查看
理解虚拟函数、多继承、虚基类和RTTI 所需的代价

1.一个vtbl 通常是一个函数指针数组。(一些编译器使用链表来代替数组,但是基本方法是一样的)在程序中的每个类只要声明了虚函数或继承了虚函数,它就有自己的vtbl,并且类中vtbl 的项目是指向虚函数实现体的指针。

2.派生类会继承基类的虚函数

3.你必须为每个包含虚函数的类的virtualtalbe 留出空间。类的vtbl 的大小与类中声明的虚函数的数量成正比(包括从基类继承的虚函数)。每个类应该只有一个virtual table.

4.调用虚函数所需的代价基本上与通过函数指针调用函数一样。虚函数本身通常不是性能的瓶颈。

5.实际上虚函数不能是内联的。这是因为“内联”是指“在编译期间用被调用的函数体本身来代替函数调用的指令”但是虚函数的“虚”是指“直到运行时才能知道要调用的是哪一个函数。

6.到虚函数能使对象变得更大,而且不能使用内联,我们已经测试过多继承和虚基类也会增加对象的大小。

7.RTTI 能让我们在运行时找到对象和类的有关信息,所以肯定有某个地方存储了这些信息让我们查询。这些信息被存储在类型为type_info 的对象里,你能通过使用typeid 操作符访问一个类的type_info 对象。

8.RTTI 数据似乎有些象virtual function talbe(虚函数表)。每个类我们只需要信息的一个拷贝,我们需要一种方法从任何包含虚函数的对象里获得合适的信息。这种RTTI 和virtual function table 之间的相似点并不是巧合:RTTI被设计为在类的vtbl 基础上实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: