我想将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。
答案 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>();
}