c ++ - shared_ptr的原始指针

时间:2015-05-13 23:36:05

标签: c++ box2d

我正在使用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'指针,所以我实际上也没有智能指针的地址。上面的例子有点缩小,以便给你一个我正面临的问题的暗示。

祝你好运 尼罗

1 个答案:

答案 0 :(得分:2)

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