2

抽象型make_sharedの代わりに使用できる方法はありますか?shared_ptr

例:

#include <memory>
#include <vector>

class Foo
{
public:
    virtual void fooFunc() = 0;
};

class Bar : public Foo
{
public:
    void fooFunc() {};
};

int main()
{
    std::vector< std::shared_ptr<Foo> > vec;

    vec.push_back(std::shared_ptr<Foo>(new Bar()));
    //vec.push_back(std::make_shared<Foo>(new Bar())); //doesn't work because Foo is abstract

    return 0;
}
4

2 に答える 2

3

std::static_pointer_castキャストを明示的に言及したい場合は、 a を使用できます。

int main()
{
    std::vector<std::shared_ptr<Foo>> vec;
    vec.push_back(std::static_pointer_cast<Foo>(std::make_shared<Bar>()));
}

しかし、それがなくても動作します:

vec.push_back(std::make_shared<Bar>());

動作を示すデモは次のとおりです

std::make_sharedとの併用はお勧めしませんnew。ここにはパフォーマンス上の懸念があり、私の意見では、バランスの取れていないnew/ deletes を避けるのは良いことです。

于 2013-08-12T12:29:58.120 に答える