我正在使用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会带来麻烦。 有没有办法引用旧的智能指针并增加其参考值?
PS:
实际上每个类都创建一个box2d体,它包含一个'this'指针,所以我实际上也没有智能指针的地址。上面的例子有点缩小,以便给你一个我正面临的问题的暗示。
祝你好运 尼罗
答案 0 :(得分:2)
如果Environment
有std::enable_shared_from_this
<Environment>
作为父类,那么,是的。只需致电envPtr->shared_from_this()
。