Основное отличие std::uniqueptr от std::sharedptr заключается в том, как они управляют владением объектом:
- std::uniqueptr сохраняет единоличное владение объектом и уничтожает его, когда выходит за пределы области видимости. 2 Никакие два экземпляра uniqueptr не могут управлять одним и тем же объектом. 2
- std::sharedptr сохраняет совместное владение объектом. 2 Один и тот же объект может принадлежать нескольким объектам sharedptr. 2 Объект уничтожается, а его память освобождается, когда уничтожается последний оставшийся shared_ptr, владеющий объектом. 2
Таким образом, std::uniqueptr используется, когда объект должен иметь только одного владельца, а std::sharedptr — когда несколько объектов работают с одним общим ресурсом. 4