En general, evite asignar desde el montón a menos que sea necesario. Si es necesario, utilice el recuento de referencias para objetos que son de larga duración y deben compartirse entre diversas partes de su código.
A veces es necesario asignar objetos dinámicamente, pero solo se usarán dentro de un lapso de tiempo determinado. Por ejemplo, en un proyecto anterior, necesité crear una representación compleja en la memoria de un esquema de base de datos, básicamente un complejo gráfico cíclico de objetos. Sin embargo, el gráfico solo era necesario para la duración de una conexión a la base de datos, después de lo cual todos los nodos podrían liberarse en una sola toma. En este tipo de escenario, un buen patrón para usar es algo que llamo el "idioma local de GC". No estoy seguro de si tiene un nombre "oficial", ya que es algo que solo he visto en mi propio código, y en Cocoa (ver NSAutoreleasePool en la referencia de Cocoa de Apple).
En pocas palabras, crea un objeto "colector" que mantiene los punteros a los objetos temporales que asigna con el nuevo. Por lo general, está vinculado a algún ámbito en su programa, ya sea un alcance estático (por ejemplo, como un objeto asignado a la pila que implementa el modismo RAII) o uno dinámico (por ejemplo, relacionado con la vida de una conexión de base de datos, como mi proyecto anterior). Cuando se libera el objeto "colector", su destructor libera todos los objetos a los que apunta.
Además, al igual que DrPizza, creo que la restricción de no usar plantillas es demasiado dura. Sin embargo, después de haber hecho un gran desarrollo en las versiones antiguas de Solaris, AIX y HP-UX (hace poco, sí, estas plataformas todavía están vivas en Fortune 50), puedo decirles que si realmente les importa la portabilidad, debería usar plantillas lo menos posible. Sin embargo, usarlos para contenedores y punteros inteligentes debería estar bien (me funcionó). Sin plantillas, la técnica que describí es más dolorosa de implementar. Se requeriría que todos los objetos gestionados por el "recopilador" deriven de una clase base común.
Lástima que esto es tan viejo. Me encantaría escuchar una explicación sobre por qué no puedes usar (específicamente) genéricos. – jmucchiello
De la documentación del marco: No use plantillas. No son portátiles para diferentes sistemas operativos, especialmente en la forma en que son compatibles con compiladores y editores de enlaces. Eso es todo lo que puedo decir al respecto –
Las plantillas fueron soportadas muy bien en los diferentes sistemas operativos en 2009, siempre y cuando dichos sistemas operativos tengan compiladores apenas competentes disponibles para ellos. Cualquiera que escriba un marco debería haber podido encontrar alguna evidencia real para su reclamo. –