我正在使用 box2d,正如您可能已经知道的那样,它保存一个对象的 void*,当不同实体之间发生碰撞时我可以将其用作引用。问题是原始项目保存在shared_ptr内,因为所有权未知并且不同的类(示例玩家类)可以“装备”另一个类(武器)。
我只是想知道是否可以将此指针放入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 会引起麻烦。 有没有办法引用旧的智能指针,增加其引用值(value)?
附注:
实际上,每个类都会创建一个 box2d 主体,其中包含一个“this”指针,因此我实际上也没有智能指针的地址。上面的示例稍微缩小了范围,以提示您我面临的问题。
最诚挚的问候 尼洛
最佳答案
如果Environment
有 std::enable_shared_from_this
<Environment>
那么作为父类,是的。只需调用envPtr->shared_from_this()
.
关于C++ - 指向shared_ptr的原始指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30226941/