Реальный вопрос, который вы должны задать себе, заключается в том, нужно ли вам выделять участника отдельно от класса.Обычно лучше, если вы просто сохраните член в классе - по сравнению с хранением любого типа указателя.Если вы не можете сделать это, если, например, время жизни элемента начинается до или после создания контейнера, может быть расширено за пределы владения членом, может быть уступлено другим объектам, тогда вы должны использовать указатели.
Когда вам нужно использовать указатели, вы должны предпочесть умные указатели необработанным указателям и выбрать конкретный тип в соответствии с вашими требованиями.Если принадлежность члена не должна использоваться совместно с другими объектами, но вам нужно использовать указатель, потому что время жизни содержащегося объекта может начинаться до или после срока службы контейнера, или если право собственности может быть передано другим объектам, но управлениеза ресурс (если он не получен) является исключительной ответственностью контейнера, тогда предпочитайте unique_ptr
или auto_ptr
.
Если содержащийся объект не принадлежит исключительно этому классу, тогда используйте shared_ptr
.Это также можно использовать, если элемент используется разными потоками, причем каждый поток имеет свой собственный shared_ptr
, даже если владение принадлежит только одному из потоков, чтобы избежать уничтожения объекта в одном потоке, когда он все еще используется.в другом.