2012-03-28 27 views
5

Eventuali duplicati:
Do static members of a class occupy memory if no object of that class is created?
Memory Allocation of Static Members in a Classmembro statico della classe di tipo propria classe

"Una classe non è considerato definito fino al suo corpo di classe è completa, una classe non può avere membri di dati del proprio tipo. Una classe può avere membri di dati che sono puntatori/riferimenti al proprio tipo. "

  • C++ Primer (Lippman Lajoie)

ha un senso.

Ma perché questo è consentito allora?

class justAClass 
{ 
    public : 
    justAClass(); 

    private :   
    static justAClass justAMember; 
} 

Per i puntatori è comprensibile. Ma come funzionerà questa cosa sopra? Come potrò mai decidere le dimensioni per oggetto di tale classe? Non è un caso ricorsivo (senza condizioni di base) avere un membro del proprio tipo, anche se è statico?

+0

I dati dei membri statici non contribuiscono alle dimensioni della classe. –

risposta

6

Il motivo per cui la classe non può avere membri di dati del proprio tipo è che il compilatore deve conoscere la dimensione dell'oggetto di classe. Ad esempio, una classe è una variabile locale in funzione, il compilatore può gestire lo stack solo conosce la dimensione della classe.

Per il tuo caso, il membro della classe statico non risiede nell'oggetto classe, quindi non ha alcun impatto sulle dimensioni dell'oggetto classe. Va bene.

3

Formalmente, la distinzione è che la dichiarazione di un membro statico in una classe non è una definizione. È necessario fornire una definizione altrove (esattamente una volta) e il compilatore non ha bisogno di conoscere la dimensione finché non incontra la definizione. I membri statici non hanno alcun impatto sulle dimensioni della classe stessa. (In molti modi, la dichiarazione di membro statico nella classe è molto simile a una dichiarazione di membro non membro extern.)

Problemi correlati