抽象类的大小

时间:2010-04-14 07:53:57

标签: c++ sizeof abstract

如何找到抽象类的大小?

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

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

7 个答案:

答案 0 :(得分:9)

可以使用sizeof运算符:

int a_size = sizeof(A);

答案 1 :(得分:3)

如上所述,这个问题并没有多大意义 - 一个实例有一个大小,但一个类实际上没有。由于您无法创建实例,因此“大小”主要是无意义的概念。您可以使用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)必须至少为4 - 但实际上我可以使用编译器(VC ++) ,g ++),它分别显示为三个和一个。

答案 2 :(得分:2)

直接的答案是sizeof运算符可以将对象作为类型:

sizeof (A)

但实际上,你为什么要这样做?你问这个问题似乎值得关注。

答案 3 :(得分:0)

'sizeof(A)'工作正常,你实际上并不需要该类的实例。

答案 4 :(得分:0)

无需创建对象来查找类的大小。您只需执行sizeof(A)

答案 5 :(得分:0)

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

A *p = NULL;

然后在*p

中使用sizeof作为参数
size_t size = sizeof *p;

这是完全正确的,因为sizeof的参数未被评估。

答案 6 :(得分:-2)

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