gpt4 book ai didi

c++ - 子对象中存在 VPTR

转载 作者:太空宇宙 更新时间:2023-11-04 15:49:26 26 4
gpt4 key购买 nike

我有一个带有虚拟析构函数的类“base”,因此其中有一个 VTable 和相应的 VTPR,以及一个从它派生的类:

class base {
public:
virtual ~base() {}
};

class der : base {};

main()
{

int a = sizeof(base); // = 4 , fine !

int b = sizeof(der); // = 4 too ?
}

现在因为派生类也是虚拟的,它会有自己的 VPTR,但是因为它也有基类的子对象,里面有 VPTR,类 'der' 的大小不应该是8 个字节,即类“der”的 VPTR 大小 + 类“base”的子对象的 VPTR 大小? (当 sizeof(void*) = 4 字节时)。

所以基本上我的问题是:当类“base”的子对象在“der”中创建时,它是否有一个单独的新 VPTR?如果是这样,那么为什么在计算“der”的大小时没有添加它的大小?

谁能澄清一下。

最佳答案

这都是特定于实现的。但实际上,派生类中只会有一个vptr;不需要两个。 vptr 的全部意义在于它被用来动态调用正确的虚函数覆盖; der 对象将简单地具有指向 base 对象的不同指针值。

[注意:您的示例可能因您(无意中?)使用私有(private)继承而不是更典型的公共(public)继承这一事实而感到困惑...]

关于c++ - 子对象中存在 VPTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10899319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com