El siguiente código crea un objeto en la pila:Creación de objetos en la pila/pila?
Object o;
Al crear un objeto en el montón que se puede utilizar:
Object* o;
o = new Object();
en lugar de:
Object* o = new Object();
Cuando nos separamos la creación de objetos del montón sobre dos líneas y llamar al constructor en la segunda línea (o = new object()
), ¿significa esto en la primera línea (Object* o
) ¿el puntero fue creado en la pila? Entonces Object o
pone el objeto en la pila, mientras que Object* o
pone el puntero a un objeto futuro en la pila?
Mi segunda pregunta es si las dos líneas de código se llamaron fuera de una clase. Recientemente leí (Global memory management in C in stack or heap?) que las variables globales no están contenidas en la pila/pila pero en realidad son otra parte de la memoria. Si este es el caso, ¿crearía Object* o
un puntero que se ubicaría en esta otra parte de la memoria y apunta al objeto montón?
Esos dos * probablemente * optimizarán a la misma cosa, creo. – Ryan
El _pointer_ siempre se crea en la pila. – leftaroundabout
Sería el segundo @leftaroundabout, y llegaría más lejos: todas las variables declaradas en un bloque se crean en la pila; el objeto completo para el primer ejemplo y el puntero al objeto en el segundo. –