Да, вы должны предпочесть умные указатели, а не голые указатели практически для всего. Но это не означает, что вы должны использовать ::boost::shared_ptr
для большинства из этих случаев. На самом деле я думаю, что вы должны использовать shared_ptr
экономно и осторожно.
Но для тех указателей, которые вы не используете shared_ptr
, вы должны использовать ::std::auto_ptr
или, если у вас есть C ++ 0x ::std::unique_ptr
. И если они не подходят, вы должны найти умный тип указателя, который является
Теперь это не всегда правильный ответ, просто почти всегда. Умные указатели имеют неоценимое значение для надлежащего отслеживания и освобождения ресурсов памяти даже в условиях исключений или других подобных странностей потока управления.
В некоторых случаях вам нужно либо написать собственный класс интеллектуальных указателей, либо не использовать его. Эти случаи очень редки, но они существуют.
Например, использование интеллектуального указателя в вашем собственном классе интеллектуальных указателей, вероятно, не является правильным решением. Указание на материал, размещенный в библиотеке C, вероятно, потребует специального умного указателя, который вызывает free
вместо delete. Возможно, вам нужен гибкий буфер, который вы можете вызвать realloc
и по какой-то причине не хотите использовать ::std::vector
.
Но обычно умный указатель (хотя обычно не ::boost::shared_ptr
(или в C ++ 0x ::std::shared_ptr
)) является правильным ответом на вашу проблему управления ресурсами.