如何将std::shared_ptr与box2d结合使用

How do I us std::shared_ptr with box2d?

本文关键字:box2d 结合 ptr std shared      更新时间:2023-10-16

如何将shared_ptr用于box2d世界?我试过了:

struct B2DWorld
{
    std::shared_ptr<b2World> world;
    void init()
    {
        b2Vec2 gravity(0.0f, -10.0f);
        world(gravity);
    }
};

但它给了我一个错误:无法匹配对"(std::shared_ptr)(b2Vec2&)"世界(重力)的调用;

使用make_shared:

void init()
{
    b2Vec2 gravity(0.0f, -10.0f);
    world = std::make_shared<b2World>(gravity);
}

或者更紧凑:

    world = std::make_shared<b2World>(b2Vec2(0.0f, -10.0f));

您可以使用new b2Vec2(...)而不是make_shared,但这会对shared_ptr控制结构产生额外的分配惩罚。