Динамическое приведение для unique_ptr
Как и в Boost, C ++ 11 предоставляет некоторые функции для приведенияshared_ptr
:
std::static_pointer_cast
std::dynamic_pointer_cast
std::const_pointer_cast
Мне интересно, однако, почему нет эквивалентов функций дляunique_ptr
.
Рассмотрим следующий простой пример:
class A { virtual ~A(); ... }
class B : public A { ... }
unique_ptr<A> pA(new B(...));
unique_ptr<A> qA = std::move(pA); // This is legal since there is no casting
unique_ptr<B> pB = std::move(pA); // This is not legal
// I would like to do something like:
// (Of course, it is not valid, but that would be the idea)
unique_ptr<B> pB = std::move(std::dynamic_pointer_cast<B>(pA));
Есть ли какая-либо причина, по которой этот шаблон использования не рекомендуется, и, таким образом, функции, эквивалентные тем, которые присутствуют вshared_ptr
не предусмотрены дляunique_ptr
?