Основное отличие std::weakptr от std::sharedptr заключается в том, что std::weakptr не увеличивает счётчик ссылок, в то время как std::sharedptr разрешает объекту иметь несколько владельцев и ведёт их учёт с помощью внутреннего счётчика. 23
std::weakptr содержит несобственную ссылку на объект, управляемый другим std::sharedptr, и не защищает его от уничтожения. 2 При этом всегда есть возможность проверить, существует ли ещё объект, на который ссылается std::weak_ptr, или нет. 1
std::sharedptr используется, когда необходимо присвоить один необработанный указатель нескольким владельцам. 5 Необработанный указатель не будет удалён до тех пор, пока все владельцы std::sharedptr не выйдут из области или не откажутся от владения. 5