Если я std :: dynamic_pointer_cast и результат базового dynamic_cast равен нулю, гарантированно ли возвращаемый shared_ptr сохранит ноль внутри? - PullRequest
1 голос
/ 13 июля 2020

Почему меня это немного смущает:

std :: shared_ptr может быть пустым , а std :: shared_ptr может указывать на null, и эти две концепции не эквивалентны.

пустой shared_ptr может хранить ненулевое значение, а shared_ptr, который хранит null, может иметь положительный счетчик ссылок.

Теперь меня интересует, как правильно тестировать после std :: dynamic_pointer_cast был ли гипс удачным или нет? документы https://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast состояние:

3-4) dynamic_cast<Y*>(r.get()) (If the result of the dynamic_cast is a null pointer value, the returned shared_ptr will be empty.)

, но поскольку empty shared_ptr не гарантирует сохранение нулевого значения, я не уверен, что это за надлежащий четко определенный тест на успешность приведения динамического c

...