2012-03-28 13 views
5

可能性の重複:
Do static members of a class occupy memory if no object of that class is created?
Memory Allocation of Static Members in a Class静的クラスのメンバ

「クラスは、そのクラス本体が完了し刚性定義されて考えられていない、クラスが持つことはできません独自の型のデータメンバ。クラスには、それ自体の型へのポインタ/参照であるデータメンバを持つことができます。

  • C++プライマー(リップマンLajoie)

は理にかなっています。

これはなぜ許可されますか?

class justAClass 
{ 
    public : 
    justAClass(); 

    private :   
    static justAClass justAMember; 
} 

ポインタについてはわかります。しかし、これは何の上で動作するのだろうか?どのように私はそのようなクラスのオブジェクトのサイズを決めるのだろうか?たとえそれが静的であっても、それ自体の型のメンバを持つ再帰的なケース(基本条件なし)ではないでしょうか?

+0

静的メンバーデータは、クラスのサイズに寄与しません。 –

答えて

6

コンパイラがクラスオブジェクトのサイズを知っている必要があるため、クラスが独自の型のデータメンバを持つことはできません。 たとえば、あるクラスは関数内のローカル変数であり、コンパイラはクラスサイズを知っているスタックだけを処理できます。

あなたの場合、静的クラスメンバーはクラスオブジェクトには存在しないため、クラスオブジェクトのサイズには影響しません。大丈夫です。

3

正式には、クラス内の静的メンバーの宣言は定義ではありません。定義は他の場所(正確に1回)に指定する必要があり、コンパイラは定義に遭遇するまでサイズを知る必要はありません。静的メンバーはクラス自体のサイズに影響を与えません。 (多くの点で、クラスの静的メンバー宣言は、extern非メンバー宣言に非常によく似ています)。

関連する問題