Ubicación de los miembros de un objeto

Posible duplicado:
¿Los miembros de datos están asignados en el mismo espacio de memoria que sus objetos en C ++?

Si declaro un objeto como este:

void main() { MyClass class; } 

Se creará automáticamente en la stack.

¿Qué pasa si hago esto?

 class MySecondClass { private: MyClass class; } 

¿Se creará el miembro en la stack? Si es así, ¿qué sucede si MySecondClass se crea a través de new ? ¿Este miembro todavía estará en la stack?

¿Se creará el miembro en la stack?

Sí.

Si es así, ¿qué sucede si MySecondClass se crea a través de new ? ¿Este miembro todavía estará en la stack?

No. Se almacenará junto con el rest del objeto, “en el montón” o donde sea que se implemente su almacén gratuito, o donde sea que el objeto se asigne dinámicamente (lo que podría ser un grupo de memoria o algo más).

Vale la pena señalar aquí que los términos “stack” y “montón” son generalmente mal utilizados. Lo que realmente estás preguntando es lo siguiente:

¿El miembro tiene duración de almacenamiento automático ? Sí.

¿Lo hará incluso cuando el objeto de encapsulación tenga una duración de almacenamiento dynamic ? No: la dinámica del objeto que encapsula es, en cierto sentido, “heredada”.

[C++11: 3.7.5]: La duración de almacenamiento de los subobjetos miembros, los subobjetos de la clase base y los elementos de la matriz es la de su objeto completo (1.8).

En cualquier caso, la ubicación práctica en la memoria será la stack y la tienda libre (“montón”) respectivamente, y eso no importa.

Y, por cierto, main debe tener el tipo de retorno int .

Sí, el miembro se crea en la stack.

Si crea un nuevo objeto de MyClass usando “nuevo”, los recursos se asignarán en el montón.