Основное отличие sharedptr от uniqueptr заключается в том, сколько указателей каждого типа может ссылаться на ресурс. 1
uniqueptr представляет собой уникальный указатель на объект, на который может быть только один указатель. 13 При уничтожении uniqueptr автоматически вызывается деструктор объекта, на который он указывает. 2
shared_ptr разрешает объекту иметь несколько владельцев. 5 Число существующих указателей отслеживается при помощи счётчика ссылок. 2 Когда счётчик обнуляется, вызывается деструктор объекта. 2
Таким образом, uniqueptr используется, когда объект должен иметь только одного владельца, а sharedptr — когда нужно несколько указателей на один и тот же ресурс. 15