Этот код не имеет никакого смысла.
После сброса ptr
он больше не управляет объектом.Если ptr
был единственным владельцем shared_ptr
, то все готово.Если это не было ... ну, у тебя нет доступа ко всем этим.Вызов reset()
для отключенного shared_ptr
- это фактически noop - сбросить больше нечего.
Представьте себе простой сценарий:
std::shared_ptr<int> a = std::make_shared<int>(42);
std::shared_ptr<int> b = a; // a and b are sharing ownership of an int
do {
a.reset();
} while (!a.unique());
Единственный способ сбросить b
- этосбросить b
- этот код будет сбрасывать только a
, он не может достичь b
.
Также обратите внимание, что unique()
устарел в C ++ 17 и полностью удален в C ++ 20.Но если даже если вы используете use_count()
вместо этого, как только вы сделаете a.reset()
, a.use_count()
будет равен 0
, потому что a
больше не указывает на объект.