2012-06-12 20 views
9

Siempre he pensado en una estructura como un objeto de tamaño fijo y, aunque no parece haber errores evidentes en el compilador, me preguntaba si hacer esto generalmente es una buena práctica. ¿Sería más conveniente cambiar la estructura a una clase o una estructura lo haría igual de bien?¿Es posible/aconseja almacenar un vector en una estructura? C++

El código, simplemente porque las personas se ponen quisquillosos:

struct Sprite 
{ 
    float x; 
    float y; 
    std::vector<Sprite> sprite; 
} 

La esencia de lo que estoy haciendo es tener hijos de una clase como del mismo tipo que el padre. Cuando el padre muere, los hijos también lo hacen.

+7

Una 'struct' es solo una clase con una visibilidad predeterminada de' public' en lugar de 'private'. –

+2

Tenga en cuenta que agregar miembros con contructor/destructor a una estructura hace que el compilador también emita un constructor/destructor para la estructura. Las técnicas estilo C que implican estructuras POD no funcionarán. –

+0

Almacenar un vector dentro de la estructura no hace que cambie su tamaño. Los elementos de Vector se almacenan en el montón, por lo que el tamaño de la estructura sigue siendo el mismo, sin importar si el vector tiene 0 o 1000 elementos. – mfontanini

Respuesta

15

Un std::vector tiene un tamaño conocido específico, y cualquier clase o estructura que lo contiene tiene un tamaño conocido específico. std::vector asigna memoria en el montón para actuar como una matriz de tamaño variable y almacena un puntero a dicha memoria. La única diferencia entre una estructura y una clase es que una estructura es por defecto pública, y una clase es por defecto privada.

+0

Gracias. Eso definitivamente tiene sentido que el vector solo sirva como un puntero a la memoria en el montón. Gracias por la respuesta detallada. –

+0

¿De manera predeterminada? ¿Por defecto? – Inverse

7

Las diferencias entre struct y class tienen que ver con la visibilidad miembro de: la diferencia más notable es que struct 's miembros son públicos por defecto, y también que struct' s herencia es pública por defecto; Los miembros class y la herencia class son privados por defecto. Aparte de eso, no hay diferencia: siempre puede escribir código con struct que produce código equivalente al código escrito con class, y viceversa.

Cuestiones relacionadas