How to make_shared a derived class?

11,971

std::shared_ptr has a converting constructor that can make a shared_ptr<Base> from a shared_ptr<Derived>, so the following should work:

#include <memory>
class Base {
    public:
    typedef std::shared_ptr<Base> Ptr;
};
class Derived : public Base {};

int main() {
    Base::Ptr myPtr = std::make_shared<Derived>();
}
Share:
11,971

Related videos on Youtube

Sam
Author by

Sam

Coder/Architect/Lead with interests in low latency systems, finance and Big Data. I am tinkering with computer vision algos and I think C++ is the best language ever invented.

Updated on June 13, 2022

Comments

  • Sam
    Sam almost 2 years

    I want to use the make_shared<T> function with a derived class, like below

    class Base {
         public:
         typedef std::shared_ptr<Base> Ptr;
    };
    
    class Derived : public Base {};
    
    Base::Ptr myPtr = std::make_shared(/* Derived() */ );
    

    How can I tell make_shared to build such an object?

    I want to avoid the classical

    Base::Ptr ptr = Base::Ptr(new Derived());
    

    To make use of the single alloc in the make_shared function.