发布网友 发布时间:2024-09-27 22:36
共1个回答
热心网友 时间:1小时前
因为要实现相同的程序功能(语义),已经看到,每个对象虽然没有编译器生成的虚拟函数指针(析构函数往往被设计为virtual,如果如此,仍然免不了会隐含增加一个虚拟函数指针,这里假设不是这样),但是还是需要另外增加一个type变量用来标识派生类的类型。构造对象时,虽然不必初始化虚拟函数指针,但是仍然需要初始化type。另外,图形继承体系的使用者调用函数时虽然不再需要一次间接的根据虚拟函数表找寻虚拟函数指针的操作,但是再调用之前,仍然需要一个switch语句对其类型进行识别。
综上所述,这里列举的5条虚拟函数带来的缺陷只剩下两条,即虚拟函数表的空间开销及无法利用“内联函数”的速度优势。再考虑虚拟函数表,每一个含有虚拟函数的类在整个程序中只会有一个虚拟函数表。可以想像到虚拟函数表引起的空间开销实际上是非常小的,几乎可以忽略不计。