如何make_shared派生类?

时间:2014-07-26 06:37:28

标签: c++ c++11 memory-management stl smart-pointers

我想将make_shared<T>函数与派生类一起使用,如下所示

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

class Derived : public Base {};

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

如何告诉make_shared构建这样的对象?

我想避免经典

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

在make_shared函数中使用单个alloc。

1 个答案:

答案 0 :(得分:28)

std::shared_ptr有一个转换构造函数,可以从shared_ptr<Base>生成shared_ptr<Derived>,因此以下内容应该有效:

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

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