. shared_ptr<Derived> shared_ptr<Base> , std::static_pointer_cast std::dynamic_pointer_cast, , – .. , . :
std::shared_ptr<Base> p(new Derived);
std::shared_ptr<Derived> q = std::static_pointer_cast<Derived>(p);
std::shared_ptr<Base> r = q;
++ 11-:
auto p0 = std::make_shared<Derived>();
std::shared_ptr<Base> p = p0;
auto q = std::static_pointer_cast<Derived>(p);