如何找到抽象类的大小?
class A
{
virtual void PureVirtualFunction() = 0;
};
由于这是一个抽象类,我无法创建此类的对象。如何使用'sizeof'运算符找到抽象类A的大小?
答案 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字节。