Patrones de gestión de memoria en C ++

Creo que tengo una experiencia considerable con patrones de diseño normal (funcional), como se describe, p. Ej. enla pandilla de cuatro libros, que utilicé principalmente en java y c #. En estos idiomas "administrados", esto es prácticamente todo lo que necesita saber para realizar su trabajo.

Sin embargo, en el mundo de C ++, el desarrollador también tiene el control de cómo se asignan, pasan y eliminan todos los objetos. Entiendo los principios (leoStroutrup entre otros textos), pero todavía me cuesta mucho decidir qué mecanismo es el mejor para un escenario determinado, y aquí es donde una cartera de patrones de diseño relacionados con la memoria sería útil.

Por ejemplo, ayer tuve que crear una clase.Results, que era un contenedor para algunos objetos y una colección (std :: vector en este caso) de otro tipo de objetos. Así que hay algunas preguntas de diseño que realmente no pude responder:

¿Debo devolver esta clase por valor o por puntero inteligente?Dentro de la clase, ¿deberían el vector y los objetos ser miembros normales, o deberían almacenarse como punteros inteligentes de nuevo?En el vector, ¿debo almacenar los objetos directamente, o los punteros inteligentes a ellos de nuevo?¿Qué deberían devolver los captadores definidos en mi clase de Resultados (es decir, valores, referencias o punteros inteligentes)?

Por supuesto, los punteros inteligentes son geniales y lo que no, pero crean desorden sintáctico y no estoy convencido de que usar malloc para cada objeto sea un enfoque óptimo.

Agradecería las respuestas a los puntos específicos anteriores, pero aún más por algunos textos más largos y más generales sobre patrones de diseño relacionados con la memoria, ¡para que pueda resolver los problemas que también tendré los lunes!

Respuestas a la pregunta(1)

Su respuesta a la pregunta