std :: shared_ptr upcasting à la classe de base - meilleure méthode?

De conversion est mieux, et quelle est la différence?

class Base
{};

class Derived : public Base, public std::enable_shared_from_this<Derived>
{};

int main(int argc, const char * argv[])
{
    std::shared_ptr<Base> ptr1 = std::dynamic_pointer_cast<Base>(std::shared_ptr<Derived>(new Derived())); //version 1
    std::shared_ptr<Base> ptr2 = std::shared_ptr<Derived>(new Derived()); //version 2
    return 0;
}

source d'informationauteur Piotr Wach