如何找到抽象类的大小?
class A
{
virtual void PureVirtualFunction() = 0;
};
由于这是一个抽象类,我无法创建此类的对象。如何使用“sizeof”运算符找到抽象类 A 的大小?
您可以使用sizeof
运算符:
int a_size = sizeof(A);
直接的答案是sizeof
运算符可以采用对象或类型:
sizeof (A)
但实际上,您为什么要这样做?您提出这个问题的事实似乎令人担忧。
如前所述,这个问题并没有真正的意义——一个实例有一个大小,但一个类真的没有。由于您无法创建抽象类的实例,因此它的大小几乎是一个毫无意义的概念。您可以使用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++),它分别显示为三个和一个。
'sizeof(A)' 工作得很好,你实际上不需要类的实例。
无需创建对象来查找类的大小。你可以简单地做sizeof(A)
。
除了建议使用类名作为参数的其他答案外sizeof
,您还可以声明指向抽象类的指针
A *p = NULL;
然后*p
用作参数sizeof
size_t size = sizeof *p;
这很好,因为sizeof
没有评估 of 的参数。
据我所知,默认情况下抽象类的大小等于 int 的大小。以此类推,上述类的 32 位机器大小为 4 字节。