Padrões de gerenciamento de memória em C ++

Eu acho que tenho uma experiência considerável com padrão projetado normal (funcional), como descrito, e. ema gangue de quatro livros, que eu usei principalmente em java e c #. Nestes idiomas "gerenciados", isso é praticamente tudo que você precisa saber para realizar seu trabalho.

No entanto, no mundo C ++, o desenvolvedor também tem o controle de como todos os objetos são alocados, passados ​​e excluídos. Eu entendo os princípios (eu leioStroutrup entre outros textos), mas ainda preciso de muito esforço para decidir qual mecanismo é o melhor para um determinado cenário - e é aí que um portfólio de padrões de design relacionados à memória seria útil.

Por exemplo, ontem eu tive que criar uma aulaResults, que era um contêiner para alguns objetos e uma coleção (std :: vector neste caso) de outro tipo de objetos. Então, há algumas perguntas de design que eu não consegui responder:

Devo retornar essa classe por valor ou por ponteiro inteligente?Dentro da classe, o vetor e os objetos devem ser membros normais ou devem ser armazenados como ponteiros inteligentes novamente?No vetor, devo armazenar os objetos diretamente ou os ponteiros inteligentes para eles novamente?O que os getters definidos em minha classe Results devem retornar (por exemplo, valores, referências ou ponteiros inteligentes)?

É claro que os indicadores inteligentes são legais e não, mas criam confusão sintática e não estou convencido de que usar o malloc para cada objeto é a melhor abordagem.

Eu ficaria grato por respostas para os pontos específicos acima, mas ainda mais por alguns textos mais longos e gerais sobre padrões de design relacionados à memória - para que eu possa resolver os problemas que terei também às segundas-feiras!

questionAnswers(1)

yourAnswerToTheQuestion