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

标签 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 会引起麻烦。 有没有办法引用旧的智能指针,增加其引用值(value)?

附注:

实际上,每个类都会创建一个 box2d 主体,其中包含一个“this”指针,因此我实际上也没有智能指针的地址。上面的示例稍微缩小了范围,以提示您我面临的问题。

最诚挚的问候 尼洛

最佳答案

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

关于C++ - 指向shared_ptr的原始指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30226941/

相关文章:

android - 线程中的数学函数返回错误值,使用 android ndk

c++ - 是否可以构造一个 "infinite"字符串?

javascript - b2DebugDraw 和 b2ContactListener 是否已在 liquidfun.js 中被替换?

Java libGDX Box2D : can you set center of mass manually?

java - 使用 Libgdx 与 box2d 寻找行为?

c++ - Box2d SetLinearVelocity 奇怪的问题

C++ gdb 错误读取变量 : Cannot access memory at address

c++ - Visual Studio 2010 自动切换到 C++/CLI 编译器

java - Box2d 设置变换

c++ - 没有g++编译器的mingw