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>();
}
Related videos on Youtube
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, 2022Comments
-
Sam almost 2 years
I want to use the
make_shared<T>
function with a derived class, like belowclass 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.