Я заметил странный факт о shared_ptrСемантика пустой shared_ptr
int* p = nullptr;
std::shared_ptr<int> s(p); // create a count (1).
std::shared_ptr<int> s2(s); // count go to 2.
assert(s.use_count() == 2);
Интересно, что семантическая дальше. Почему s и s2 используют nullptr? Имеет ли смысл?
Или, может быть, эта необычная ситуация не заслуживает утверждения if (дорого?)?
Спасибо за любое просвещение.
AFAICT, не имеет значения, является ли оно нулевым или является ли он действительным объектом, поэтому зачем ему это нужно? – chris
Я не предполагаю, что указатели подсчета ссылок имеют специальную обработку для nullptr. – BlackCat
В C++ 11 'use_count()' должен быть '0' на пустом' shared_ptr' (20.7.2.2.5/7). – ipc