c++ - 指向 shared_ptr 的原始指针

c++ - raw pointer to shared_ptr

我正在使用 box2d,正如您可能已经知道的那样,它包含一个对象的 void*,当不同实体之间发生碰撞时我可以将其用作参考。问题是原始物品保存在 shared_ptr 中,因为所有权未知并且不同的 classes(例如玩家 class)可以 'equip' 另一个 class(武器)。

我只是想知道是否可以将此指针放在 shared_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:

实际上每个 class 都会创建一个包含 'this' 指针的 box2d 主体,所以我实际上也没有智能指针的地址。上面的示例已经缩小范围,以提示您我所面临的问题。

此致 尼洛

如果 Environmentstd::enable_shared_from_this<Environment> 作为 parent class 那么,是的。只需调用 envPtr->shared_from_this().