En el pasado, cada vez que necesitaba crear una instancia de una clase, usaba new para asignarla en el montón (excepto las clases stl y math clases como vec3 y mat4).Cuándo debería asignarse una clase en la pila en lugar del montón
Sin embargo, solo estaba mirando críticamente algunos de mis códigos y me di cuenta de que técnicamente podría estar haciendo estas clases en la pila. No son muy grandes, no necesitan ser modificados fuera de su alcance actual, etc. Cuando yo (ocasionalmente) necesito pasarlos a otra función, puedo usar una referencia tan fácilmente como podría pasar un puntero.
En el pasado, siempre dejé de asignar en el montón, y solo usé la pila en ciertos casos, sin embargo, ahora me pregunto si hubiera sido mejor asignar de forma predeterminada en la pila, y solo usar el montón cuando
- un puntero es realmente necesario (es decir, el tiempo de vida del objeto a durar más que el alcance de la declaración)
- la clase o la matriz es demasiado grande para la pila
- herencia lo requiere (clase base abstracta/interfaz)
- algo más?
Lo cual también plantea la pregunta: ¿qué tan grande es una clase demasiado grande (más o menos) para asignar razonablemente en la pila? (suponiendo que estamos trabajando, como mínimo, en teléfonos inteligentes y yendo a los escritorios de gama alta) ¿Me estoy preocupando innecesariamente por las restricciones de tamaño de la pila? (Probablemente, siempre y cuando no estemos hablando de grandes matrices, y ninguna clase va a ser ni siquiera cerca de un kilobyte)
Agregaría, cuando desee que la duración del objeto supere el alcance de la declaración. Fuera de su lista, eliminaría todos excepto posiblemente el argumento de tamaño de clase. – juanchopanza
No es una respuesta directa, pero la asignación de la pila tiene algunas ventajas reales sobre la asignación del montón (por ejemplo, velocidad, alcance automático, etc.) [Esta respuesta] (http://stackoverflow.com/a/11044838/195701) enumera algunos de ellos. – Miguel
@juanchopanza Considero que este es uno de los casos en los que 'se necesita realmente un puntero' – zacaj