2014-07-26 4 views
9

ich die make_shared<T> Funktion mit einer abgeleiteten Klasse verwenden möchten, wie untenWie man eine abgeleitete Klasse make_shared?

class Base { 
    public: 
    typedef std::shared_ptr<Base> Ptr; 
}; 

class Derived : public Base {}; 

Base::Ptr myPtr = std::make_shared(/* Derived() */); 

Wie kann ich make_shared tell ein solches Objekt zu bauen?

Ich mag die klassischen

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

vermeiden Verwendung des einzelnen alloc in der make_shared Funktion zu machen.

Antwort

19

std::shared_ptr hat eine Umwandlung Konstruktor, der eine shared_ptr<Base> von einem shared_ptr<Derived> machen können, so sollten folgende Arbeiten:

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

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