Каковы эквивалентные применения каждого умного указателя по сравнению с аналогичными (но не ограничиваясь ими) некоторыми передовыми методами с использованием необработанных указателей ?std :: unique_ptr vs std :: shared_ptr vs std :: weak_ptr vs std :: auto_ptr vs raw указатели
Мое понимание минимально, но от того, что я могу собрать:
- Сырье Pointers: только использовать, если вы действительно, действительно, действительно, действительно, знаете, что вы делаете и тщательно скрываемые использование позади интерфейс.
- 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;
Singletons с передачей права собственности:
class Keyboard {
public:
//...
static Keyboard* CreateKeyboard();
~Keyboard();
//...
private:
//...
Keyboard();
static Keyboard* _instance;
//...
};
Совокупные Con нет, теперь возили собственности: пространственного разделения графы и дерева, итерационные контейнеров и т.д.
Композитных Контейнеры собственности: крупных объектов.
--EDIT--
Как я работаю, я наткнулся на интересный случай, DeadMG отметил, что умные указатели должны быть использованы в качестве простых абстракций ухаживают управления ресурсами; какие объекты области области, которые не могут быть созданы в куче в точке объявления, но должны быть созданы позднее?
Я не понимаю, о чем вы просите. Как реализовать поведение смарт-указателя с помощью raw-указателей? –
Я понятия не имею, что это за вопрос, но если вы вызываете «unique_ptr» указатель Singleton, я подозреваю, что у вас совершенно другое значение Singleton здесь. – Puppy
@NeilKirk. На самом деле, что такое использование интеллектуальных указателей по сравнению с исходными указателями? то есть какой идиомой является каждый умный указатель, который должен заменить? – Casey