RAW指针共享_ptr



我正在使用box2d,众所周知,当碰撞发生在不同实体之间时,它可以用作对象的void*。问题是原始项目保存在共享_ptr中,因为所有权是未知的,并且不同的类(示例玩家类)可以"装备"另一个类(武器)。

我只是想知道是否可以将此指针放入共享_ptr中,并将相同的对象参考原始对象?

这是一个例子:

std::vector<std::shared_ptr<Environment>> listEnvironment;
listEnvironment.push_back(std::make_shared(new Weapon()));
//takes a void pointer
box2d->userId = listEnvironment.back().get();
//some shit happens somewhere else and collision occurs and I get pointer back from box2d's callback:
Environment* envPtr = static_cast<Environment*>(box2d->userId);

您可以看到envptr会造成麻烦。有没有一种方法可以参考旧的智能销钉并增加其参考值?

ps:

实际上,每个类都创建一个装有"此"指针的Box2D主体,因此我实际上也没有智能销钉的地址。上面的示例很狭窄,可以暗示我面临的问题。

最好的问候nilo

如果Environmentstd::enable_shared_from_this <Environment>作为父类,那么,是的。只需致电envPtr->shared_from_this()

最新更新