码迷,mamicode.com
首页 > 其他好文 > 详细

编写高质量代码——在正确的场合下使用恰当的特性

时间:2014-06-15 14:35:31      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   http   ext   color   

虚函数:虚函数机制的实现是通过虚函数表和指向虚函数表的指针(存放在对象的空间中)来完成的。bubuko.com,布布扣

1)空间方面:每个类只用一个虚函数表的拷贝,故其占用的空间不是很大。

2)时间方面:虚函数的调用开销包括两次整型加法和一次指针间接引用的开销。

其动态绑定的实现步骤如下:

(a)根据对象的虚指针VPtr找到该对象对应的虚函数表VTable,所需的开销仅是一次偏移量调整(整型加法)加上一次指针间接运算。

(b)在VTable中找到被调用函数的对应指针(整型加法)。

(c)调用(b)中得到的指针所指向的函数。

(a)和(b)的开销与(c)中的复杂调用开销(保存现场->传递参数->传递返回值->恢复现场)相比是微不足道的。

==============================================================

多重继承:对于多重继承,对象内部会有多个VPtr,所以会使偏移量计算变得复杂,而且会使对象占用的空间和运行时开销都变大。

class A{ ... };

class B{ ... };

class C : public A, public B{ ... };

如果A和B中都具有虚函数,那么C类对象会有三个VPtr指针,故需要更多的空间去存储这几个虚函数指针,同时函数偏移量的计算也要三选其一,计算变复杂。

==============================================================

虚基类:虚基类就是为多继承而产生的。对象中的指针更多。函数偏移量计算更复杂。

==============================================================

运行时类型检测(RTTI):在程序运行时得到对象和类相关信息的保证。

通常并不需要知道一个类的确切类型,因为C++提供的虚函数机制可以实现确定哪种类型的正确行为。但有时,确定一个匿名的多态指针指向对象的准确类型也是很有用的。

--------------------------------------------------------------

典型的RTTI是通过在VTable中放一个额外的指针来实现的。该指针指向一个专门用于描述该特定类型的type_info结构。每个类型仅有一份type_info结构的拷贝。

一般通过 typeid() 表达式获取对象的类型信息,typeid()带有一个参数,它可以是一个对象引用或指针,它返回一个type_info 类型的常量对象的引用。使用时,可以应用运算符"=="和"!="来比较这些对象,也可用name() 来获得该类型的名称。


编写高质量代码——在正确的场合下使用恰当的特性,布布扣,bubuko.com

编写高质量代码——在正确的场合下使用恰当的特性

标签:style   class   blog   http   ext   color   

原文地址:http://blog.csdn.net/u012627502/article/details/30756417

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