【发布时间】:2023-03-12 06:29:01
【问题描述】:
我在读这篇文章,在这个标题 Inheritance of Base-class vPtrs ,但不明白他在这一段中的意思:
"但是,由于多重继承,一个类可能间接继承自多个类。如果我们决定将所有基类的vtable合并为一个,vtable可能会变得非常大。为了避免这样,编译器不会丢弃所有基类的 vPtrs 和 vtables 并将所有 vtables 合并为一个,而是仅对所有 FIRST 基类执行此操作,并保留所有后续基类及其基类的 vPtrs 和 vtables强>。”
换句话说,在一个对象的内存占用中,您可以在整个层次结构中找到其所有基类的 vPtr,除了所有“首生”。。 em>"
谁能用简单易懂的形式解释一下这一段。
另一个问题,请看这个答案: Follow this answer
现在感兴趣的代码 (*(foo)((void**)(((void**)(&a))[0]))[1])();,谁能告诉我发生了什么? ,特别是为什么在 c++(void**)(&a) 中这样做。我知道这是强制转换,但 &a 返回类型为 void* 的 vptr 的地址(在上述问题链接 2 中)。
谢谢
【问题讨论】:
标签: c++