2014-07-26 3 views
9
내가

어떻게 make_shared 파생 클래스?

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

class Derived : public Base {}; 

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

가 어떻게이 같은 객체를 구축 make_shared 말할 수 아래처럼, 파생 클래스로 make_shared<T> 기능을 사용하려면

?

은 내가 make_shared 기능에 단일 ALLOC을 사용하려면 고전

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

을 피하고자합니다.

답변

19

std::shared_ptrshared_ptr<Derived>에서 shared_ptr<Base>을 만들 수있는 변환 생성자를 가지고 있으므로 다음과 같은 작업을해야합니다 :

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

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