3

如何找到抽象类的大小?

class A
{
    virtual void PureVirtualFunction() = 0;
};

由于这是一个抽象类,我无法创建此类的对象。如何使用“sizeof”运算符找到抽象类 A 的大小?

4

7 回答 7

9

可以使用sizeof运算符:

int a_size = sizeof(A);
于 2010-04-14T07:55:49.643 回答
2

直接的答案是sizeof运算符可以采用对象类型:

sizeof (A)

但实际上,您为什么要这样做?您提出这个问题的事实似乎令人担忧。

于 2010-04-14T07:58:01.700 回答
2

如前所述,这个问题并没有真正的意义——一个实例有一个大小,但一个类真的没有。由于您无法创建抽象类的实例,因此它的大小几乎是一个毫无意义的概念。您可以使用sizeof(A),但结果意义不大——感谢空基类优化(举一个明显的例子),sizeof(A)不一定告诉您使用基类对派生类的大小有多大影响。A

例如:

#include <iostream>

class A {};
class B {};
class C {};
class D {};

class Z : public A, public B, public C, public D {};

int main() { 
     std::cout << "sizeof(A) = " << sizeof(A);
     std::cout << "sizeof(Z) = " << sizeof(Z);
     return 0;
}

如果我在我的计算机上运行它,sizeof(A)显示为 1。显而易见的结论是,它sizeof(Z)必须至少是四个——但实际上使用我手边的编译器(VC++、g++),它分别显示为三个和一个。

于 2010-04-14T08:07:51.463 回答
0

'sizeof(A)' 工作得很好,你实际上不需要类的实例。

于 2010-04-14T07:57:33.980 回答
0

无需创建对象来查找类的大小。你可以简单地做sizeof(A)

于 2010-04-14T07:57:55.630 回答
0

除了建议使用类名作为参数的其他答案外sizeof,您还可以声明指向抽象类的指针

A *p = NULL;

然后*p用作参数sizeof

size_t size = sizeof *p;

这很好,因为sizeof没有评估 of 的参数。

于 2010-04-14T08:07:21.853 回答
-3

据我所知,默认情况下抽象类的大小等于 int 的大小。以此类推,上述类的 32 位机器大小为 4 字节。

于 2010-08-19T12:58:42.323 回答