Шаблоны управления памятью в C ++

Я думаю, что у меня есть значительный опыт работы с обычными (функциональными) разработанными шаблонами, как описано, например, вбанда из четырех книг, который я в основном использовал в Java и C #. В этих "удалось" языки - это почти все, что вам нужно знать, чтобы выполнить свою работу.

Однако в мире C ++ разработчик также имеет контроль над тем, как все объекты распределяются, передаются и удаляются. Я понимаю принципы (читаюStroutrup среди других текстов), но мне все еще нужно много усилий, чтобы решить, какой механизм лучше всего подходит для данного сценария, и именно здесь был бы полезен портфель шаблонов проектирования, связанных с памятью.

Например, вчера я должен был создать классResultsэто был контейнер для нескольких объектов и коллекции (в данном случае std :: vector) объектов еще одного типа. Есть несколько вопросов о дизайне, которые я не смогт действительно ответить:

Должен ли я вернуть этот класс по значению или по умному указателю?Должны ли внутри класса вектор и объекты быть обычными членами или они снова должны храниться как интеллектуальные указатели?В векторе, я должен хранить объекты напрямую, или умные указатели на них снова?Что должны возвращать методы получения, определенные в моем классе Results (то есть значения, ссылки или умные указатели)?

Конечно, умные указатели - это круто, а что нет, но они создают синтаксический беспорядок, и я не уверен, является ли использование malloc для каждого отдельного объекта оптимальным подходом.

Я был бы признателен за ответы по конкретным пунктам выше, но еще больше за более длинные и общие тексты о шаблонах проектирования, связанных с памятью, - чтобы я мог решать проблемы, которые у меня будут и по понедельникам!

Ответы на вопрос(1)

Ваш ответ на вопрос