web-dev-qa-db-ja.com

派生クラスをmake_sharedする方法は?

以下のように、派生クラスで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関数で単一の割り当てを利用するため。

18
Sam

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>();
}
33
Mankarse