2012-03-28 24 views
5

Powiel możliwe:
Do static members of a class occupy memory if no object of that class is created?
Memory Allocation of Static Members in a Classstatyczne członek klasa klasa własnego typu

„Klasa nie jest uznawana zdefiniowane aż jego ciało klasa jest pełna, klasa nie może mieć elementy danych własnego typu Klasa może mieć elementy danych, które są wskaźnikami/odnośnikami do własnego typu. "

  • C++ Primer (Lippman Lajoie)

sens.

Ale dlaczego jest to dozwolone?

class justAClass 
{ 
    public : 
    justAClass(); 

    private :   
    static justAClass justAMember; 
} 

Dla wskaźników jest to zrozumiałe. Ale jak będzie działać powyższa rzecz? Jak kiedykolwiek zdecyduję o wielkości przedmiotu takiej klasy? Czy nie jest to przypadek rekursywny (bez warunku podstawowego), aby mieć element własnego typu, nawet jeśli jest statyczny?

+0

Statyczne dane członków nie przyczyniają się do wielkości klasy. –

Odpowiedz

6

Powodem, dla którego klasa nie może mieć elementów danych własnego typu, jest to, że kompilator musi znać rozmiar obiektu klasy. Na przykład jedna klasa jest lokalną zmienną w funkcji, kompilator może obsłużyć stos tylko zna rozmiar klasy.

Dla Twojej sprawy, statyczny element klasy nie znajduje się w obiekcie klasy, więc nie ma wpływu na rozmiar obiektu klasy. W porządku.

3

Formalnie rozróżnienie polega na tym, że deklaracja członka statycznego w klasie nie jest definicją. Musisz podać definicję w innym miejscu (dokładnie raz), a kompilator nie musi znać rozmiaru, dopóki nie napotka definicji. Członkowie statyczni nie mają wpływu na wielkość samej klasy. (Pod wieloma względami statyczna deklaracja członkowska w klasie jest bardzo podobna do deklaracji niezależnej od extern).

Powiązane problemy