Std:: unique_ptr vs std:: shared_ptr vs std:: weak_ptr vs std:: auto_ptr vs raw указатели

Каковы эквивалентные применения каждого умного указателя по сравнению с аналогичными (но не ограничиваясь ими) некоторыми передовыми методами с использованием исходных указателей?

Мое понимание минимально, но из того, что я могу собрать:

  • Raw Указатели: Используйте, только если действительно, действительно, действительно, знаете, что вы делаете, и тщательно скрывали использование интерфейса.
  • std:: auto_ptr: Устаревшее никогда не используется.
  • std:: unique_ptr: Указатель Singleton, который передает право собственности на присвоение.
  • std:: shared_ptr: Ссылка на подсчитанный указатель, который не передает права собственности на присваивание, но увеличивает счетчик ссылок. Когда все ссылки оставляют область видимости или явно std::shared_ptr::reset, вызывается базовый deallocator.
  • std:: weak_ptr: Подтип std::shared_ptr, который не увеличивает счетчик ссылок и недействителен, когда его родительский std::shared_ptr больше не существует. Может вернуться и недействительная ссылка. Всегда проверяйте перед использованием.

ПРИМЕРЫ ЭКВИВАЛЕНТОВ RAW POINTER

подсчет ссылок, реализация кэша: std::map<std::string, std::pair<long, BITMAP*> > _cache;

Синглтоны с передачей владения:

class Keyboard {
public:
//...
    static Keyboard* CreateKeyboard();
    ~Keyboard();
//...
private:
//...
    Keyboard();
    static Keyboard* _instance;
//...
};

Агрегированные контейнеры, без владения: Пространственные графики разбиения и деревья, итерационные контейнеры и т.д.

Составные контейнеры, собственность: Большие объекты.

- EDIT -

Когда я работаю, я столкнулся с интересным делом, DeadMG указал, что интеллектуальные указатели должны использоваться как простые абстракции для управления ресурсами; какие объекты области видимости объекта, которые не могут быть созданы в куче в точке объявления, но должны быть созданы позднее?

Ответы

Ответ 1

какой идиомой является каждый умный указатель, который должен заменить?

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