Second Edition
14.7 继承和 VTABLE
可以想象,当实现继承和定义一些虚函数时,会发生什么事情?编译器对新类创建一个新 VTABLE 表,并且插入新函数的地址,对于没有重定义的虚函数使用基类函数的地址。无论如何,在 VTABLE 中总有全体函数的地址,所以绝对不会对不在其中的地址调用。(否则损失惨重。)
但当在派生类中增加新的虚函数时会发生什么呢?这里有一个例子:
虚函数和虚继承及其在内存中布局 详细解释了当增加新的虚函数时,编译器如何处理这些变化。编译器会在新的 VTABLE 中添加新函数的地址,而未重新定义的虚函数仍然使用基类的函数地址。这样,不论函数是否被重写,调用时总能找到正确的函数地址,避免了函数调用错误导致的灾难性后果。
同样,c++虚函数表解析彻底攻克继承和虚函数 也深入剖析了这一过程。通过解析虚函数表,我们能更清晰地理解虚函数和继承的复杂性,以及编译器如何高效地处理这些结构。
下载地址
用户评论