2012-03-28 29 views
5

Duplicar posibles:
Do static members of a class occupy memory if no object of that class is created?
Memory Allocation of Static Members in a Classmiembro de la clase estática del propio tipo de clase

"Una clase no se considera definida hasta el de su cuerpo de la clase se ha completado, una clase no puede tener miembros de datos de su propio tipo. Una clase puede tener miembros de datos que sean punteros/referencia a su propio tipo ".

  • C++ Primer (Lippman Lajoie)

tiene sentido.

¿Pero por qué está permitido esto entonces?

class justAClass 
{ 
    public : 
    justAClass(); 

    private :   
    static justAClass justAMember; 
} 

Para los punteros es comprensible. ¿Pero cómo funcionará esto de arriba? ¿Cómo voy a decidir el tamaño para el objeto de tal clase? ¿No es un caso recursivo (sin condición base) tener un miembro de su propio tipo, incluso si es estático?

+0

Los datos de los miembros estáticos no contribuyen al tamaño de la clase. –

Respuesta

6

El motivo de la clase no puede tener datos de miembros de su propio tipo es que el compilador debe saber el tamaño del objeto de la clase. Por ejemplo, una clase es una variable local en función, el compilador puede manejar la pila solo conoce el tamaño de la clase.

Para su caso, el miembro de la clase estática no reside en el objeto de clase, por lo que no tiene impacto en el tamaño del objeto de clase. Está bien.

3

Formalmente, la distinción es que la declaración de un miembro estático en una clase no es una definición. Debe proporcionar una definición en otro lugar (exactamente una vez), y el compilador no necesita saber el tamaño hasta que encuentre la definición. Los miembros estáticos no afectan el tamaño de la clase en sí. (En muchos sentidos, la declaración de miembro estático en la clase es muy similar a una declaración de no miembro extern).

Cuestiones relacionadas