抽象クラスのサイズを確認するにはどうすればよいですか?
class A
{
virtual void PureVirtualFunction() = 0;
};
これは抽象クラスなので、このクラスのオブジェクトを作成できません。「sizeof」演算子を使用して抽象クラス A のサイズを見つけるにはどうすればよいですか?
次の演算子を使用できます。sizeof
int a_size = sizeof(A);
直接的な答えは、sizeof
演算子がオブジェクトまたは型のいずれかを取ることができるということです:
sizeof (A)
しかし、本当に、なぜこれをやりたいのですか?あなたがこれを尋ねているという事実は、懸念の原因のようです。
前述のように、この質問には意味がありません。インスタンスにはサイズがありますが、クラスには実際にはありません。抽象クラスのインスタンスを作成することはできないため、そのサイズはほとんど意味のない概念です。を使用できますsizeof(A)
が、結果はあまり意味がありません。空の基底クラスの最適化のおかげで (1 つの明白な例として)、基底クラスとしての使用が派生クラスのサイズにどれだけ寄与するかを必ずしも示している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;
}
これを自分のコンピューターで実行すると、 1 とsizeof(A)
表示されます。明らかな結論はsizeof(Z)
、少なくとも 4 でなければならないということです。しかし、実際には、手元にあるコンパイラ (VC++、g++) では、それぞれ 3 と 1 と表示されます。
'sizeof(A)' は問題なく動作します。実際にはクラスのインスタンスは必要ありません。
クラスのサイズを見つけるためにオブジェクトを作成する必要はありません。簡単にできますsizeof(A)
。
クラスの名前を の引数として使用することを提案した他の回答に加えて、sizeof
抽象クラスへのポインターを宣言することもできます
A *p = NULL;
そして、*p
引数として使用しますsizeof
size_t size = sizeof *p;
の引数はsizeof
評価されないので、これはまったく問題ありません。
私の知る限り、デフォルトでは、抽象クラスのサイズは int のサイズに相当します。そのため、上記のクラスの 32 ビット マシン サイズは 4 バイトです。