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án los datos de un objeto y cómo se controla la vida de ese 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, así que deja la elección al programador. Para una velocidad máxima de ejecución, el almacenamiento y la vida se pueden determinar mientras se escribe el programa, 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 una zona fija de memoria que se asigna antes de que el programa empiece a ejecutarse. Usar la pila o el área de almacenamiento estático da prioridad a la rapidez de asignación y liberación de memoria, lo 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 el diseño asistido por computador, la gestión de almacenes o el control de tráfico aéreo, esto es demasiado 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 créelo 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 necesario para reservarlo en 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 otra para moverlo de nuevo hacia arriba). El enfoque dinámico parte de la suposición, generalmente lógica, de que los objetos tienden a ser complicados, por eso la sobrecarga extra de encontrar espacio para alojarlos y después liberarlo no tendrá 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.