2014-07-26 14 views
9

Tôi muốn sử dụng các chức năng make_shared<T> với một lớp học có nguồn gốc, như dưới đâyLàm thế nào để make_shared một lớp dẫn xuất?

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

class Derived : public Base {}; 

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

Làm thế nào tôi có thể nói make_shared để xây dựng như một đối tượng?

tôi muốn tránh những cổ điển

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

Để tận dụng các alloc đơn trong hàm make_shared.

Trả lời

19

std::shared_ptr có một constructor chuyển đổi có thể làm cho một shared_ptr<Base> từ một shared_ptr<Derived>, vì vậy sau đây nên làm việc:

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

int main() { 
    Base::Ptr myPtr = std::make_shared<Derived>(); 
} 
Các vấn đề liên quan