Здравствуйте, Άнoним, Вы писали:
Ά>Здравствуйте, jazzer, Вы писали:
J>>Он нужен, чтоб не звать delete руками.
Ά>Это понятно. shared_ptr тоже нужен чтобы не делать delete руками, но с ним понятно — что-то типа указателя со сборкой мусора на подсчете ссылок.
Так из названия же видно.
shared_ptr — для совместного владения, когда на объект может указывать много shared_ptr (можно создавать копии) и объект убивают, только когда все ссылки помрут.
unique_ptr — уникален, т.е. нескольких unique_ptr, указывающих на один и тот же объект, быть не может (копирование запрещено). Но при этом разрешена передача владения от одного unique_ptr другому, с одновременным уничтожением первого.
Ά>Меня интересуют практические, архитектурные области применения unique_ptr.
Архитектурно — везде, где у тебя в программе есть владеющий указатель (т.е. по которому ты зовешь delete, когда он тебе больше не нужен) и он ровно один для каждого объекта, на который он указывает, имеет смысл вместо голого указателя использовать unique_ptr.
Еще один сценарий — функции-фабрики, возвращающие указатель на вновь созданный объект. Такой указатель тоже имеет смысл возвращать как unique_ptr — тогда он гарантировано помрет, даже если результат по какой-то причине не будет использован (например, из-за исключенияв неподходящий момент).