Каково эквивалентное использование каждого интеллектуального указателя по сравнению с аналогичными (но не ограничивающимися) некоторыми продвинутыми методами, использующими необработанные указатели?
Мое понимание минимально, но из того, что я могу извлечь:
std::shared_ptr::reset
основной deallocator
называется.std::shared_ptr
который не увеличивает счетчик ссылок и становится недействительным, когда его родитель std::shared_ptr
более не существует. Может вернуться и недействительная ссылка. Всегда проверяйте перед использованием.Эквивалентные примеры RAW-указателей
Подсчет ссылок, реализации кеша: std::map<std::string, std::pair<long, BITMAP*> > _cache;
Синглтоны с передачей права собственности:
class Keyboard {
public:
//...
static Keyboard* CreateKeyboard();
~Keyboard();
//...
private:
//...
Keyboard();
static Keyboard* _instance;
//...
};
Агрегатные контейнеры, без права собственности: Графы и деревья пространственного разделения, итерационные контейнеры и т. Д.
Композитные контейнеры, собственность: Крупные объекты.
—РЕДАКТИРОВАТЬ—
Работая, я натолкнулся на интересный случай, DeadMG указал, что умные указатели должны использоваться как простые абстракции для управления ресурсами; как насчет объектов области файла, которые не могут быть созданы в куче в точке объявления, а должны быть созданы позднее?
какую идиому каждый умный указатель должен заменить?
Каждый из них, который когда-либо имел дело с уничтожением указанного ресурса. Иными словами, практически все из них. Я не могу представить себе никаких идиом, использующих необработанные указатели, которые бы не включали уничтожение целевого ресурса. Любое другое использование на самом деле не идиома, это просто «Использование указателя».
Других решений пока нет …