如何使用make_shared创建一个派生类?

26

我想使用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函数中利用单个分配。

1个回答

47

std::shared_ptr 有一个转换构造函数,可以从 shared_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>();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接