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 主体,所以我实际上也没有智能指针的地址。上面的示例已经缩小范围,以提示您我所面临的问题。
此致
尼洛
如果 Environment
有 std::enable_shared_from_this
<Environment>
作为 parent class 那么,是的。只需调用 envPtr->shared_from_this()
.
我正在使用 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 主体,所以我实际上也没有智能指针的地址。上面的示例已经缩小范围,以提示您我所面临的问题。
此致 尼洛
如果 Environment
有 std::enable_shared_from_this
<Environment>
作为 parent class 那么,是的。只需调用 envPtr->shared_from_this()
.