Técnicamente, el dominio de la POO son los tipos abstractos de datos, la herencia y el polimorfismo, pero otros asuntos pueden ser al menos igual de importantes. Esta sección ofrece una visión general de esos asuntos.
Es especialmente importante la forma en que se crean y se destruyen los objetos. ¿Dónde está el dato para un objeto y cómo se controla la vida de este objeto? Diferentes lenguajes de programación usan distintas filosofías al respecto. C++ adopta el enfoque de que el control de eficiencia es la cuestión más importante, pero eso delega la elección al programador. Para una velocidad máxima de ejecución, el almacenamiento y la vida se determinan mientras el programa se escribe, colocando los objetos en la pila o en almacenamiento estático. La pila es un área de memoria usada directamente por el microprocesador para almacenar datos durante la ejecución del programa. A veces las variables de la pila se llaman variables automáticas o de ámbito (scoped). El área de almacenamiento estático es simplemente un parche fijo de memoria alojado antes de que el programa empiece a ejecutarse. Usar la pila o el área de almacenamiento estático fija una prioridad en la rapidez de asignación y liberación de memoria, que puede ser valioso en algunas situaciones. Sin embargo, se sacrifica flexibilidad porque se debe conocer la cantidad exacta, vida, y tipo de objetos mientras el programador escribe el programa. Si está intentando resolver un problema más general, como un diseño asistido por computadora, gestión de almacén, o control de tráfico aéreo, eso también es restrictivo.
El segundo enfoque es crear objetos dinámicamente en un espacio de
memoria llamado
montículo (heap). En
este enfoque no se sabe hasta el momento de la ejecución cuántos
objetos se necesitan, cuál será su ciclo de vida, o su tipo
exacto. Estas decisiones se toman de improviso mientras el
programa está en ejecución. Si necesita un nuevo objeto,
simplemente creelo en el montículo cuando lo necesite, usando la
palabra reservada new
. Cuando ya no necesite ese espacio
de almacenamiento, debe liberarlo usando la palabra reservada
delete
.
Como la memoria se administra dinámicamente en tiempo de ejecución, la cantidad de tiempo requerido para reservar espacio en el montículo es considerablemente mayor que el tiempo para manipular la pila (reservar espacio en la pila a menudo es una única instrucción del microprocesador para mover el puntero de la pila hacia abajo, y otro para moverlo de nuevo hacia arriba). El enfoque dinámico asume que los objetos tienden a ser complicados, por eso la sobrecarga extra de encontrar espacio para alojarlos y después liberarlos, no tiene un impacto importante en la creación de un objeto. Además, el aumento de flexibilidad es esencial para resolver problemas generales de programación.
Hay otra cuestión, sin embargo, y es el tiempo de vida de un
objeto. Si crea un objeto en la pila o en espacio estático, el
compilador determina cuánto tiempo dura el objeto y puede
destruirlo automáticamente. Pero si lo crea en el montículo, el
compilador no tiene conocimiento de su tiempo de vida. En C++, el
programador debe determinar programáticamente cuándo destruir el
objeto, y entonces llevar a cabo la destrucción usando la palabra
reservada delete
. Como alternativa, el entorno puede
proporcionar una característica llamada recolector de
basura (garbage
collector) que automáticamente descubre qué
objetos ya no se usan y los destruye. Naturalmente, escribir
programas usando un recolector de basura es mucho más conveniente,
pero requiere que todas las aplicaciones sean capaces de tolerar
la existencia del recolector de basura y la sobrecarga que
supone. Eso no encaja en los requisitos del diseño del lenguaje
C++ por lo que no se incluye, aunque existen recolectores de
basura para C++, creados por terceros.