如何将shared_ptr传递给裸 ptr 函数
How to pass shared_ptr to naked ptr function
我有一个由库定义的Entity
类,Registry
该类是管理使用映射注册到它的实体的类。
我想做什么:
//Registry Signature
void Registry::add(Entity* entity);
//my function (IGameEntity subclasses Entity)
void GameLogic::addEntity(shared_ptr<IGameEntity> entity, GameEntityId id) {
GameEntityId entityId = entity->getId();
gameEntities.push_back(entity);
Framework::Registry::instance()->add(entity); //<-- this doesn't work
}
我正在尝试弄清楚如何处理这个问题,因为我保留了shared_ptr,然后我将不得不传递一个指针。
另一件事是,如果注册表因某种原因被销毁,它将对映射中剩余的所有实体调用delete
。
如果我通过entity
weak_ptr<Entity>(entity)
它可以工作,但我没有完全掌握如果Registry
调用删除weak_ptr会发生什么。
如果我通过entity
entity.get()
当引用计数达到零或注册表尝试删除它时会发生什么。
您有两个不兼容的所有权方案。
您需要更改其中一个方案,或者克隆应从一个方案传输到另一个方案的对象。
当只有一个对对象的引用时,有一个技巧可以释放shared_ptr
。但你不想那样做。即使您对图书馆内部有足够的了解来做到这一点。
因此,作为一个实用的解决方案,更改注册表。
让它需要shared_ptr
.
相关文章:
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 视觉 C++编译器在计算其参数之前是否允许将函数 ptr 存储在寄存器中?
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误
- 通过成员函数将唯一 ptr 的向量附加到另一个向量
- 如何将函数 ptr 分配给函数 ptrs 数组(Arduino C++)
- 带智能ptr的Pimpl-为什么需要构造函数/析构函数
- 如何将shared_ptr传递给裸 ptr 函数
- 将 lamba 隐式转换为函数 ptr 以创建类
- c++在没有虚拟析构函数的多态性中共享ptr
- 如何调用传递的函数(函数 ptr 作为参数传递给函数)
- OpenCL enqueueWriteImage no const void* ptr 在包装器中C++但在 C 函数中
- 正在从DLL获取函数PTR
- 从虚拟成员函数ptr中进行类型推导(bug?)
- 为什么这个显式析构函数会导致共享ptr中的内存损坏
- 如何访问受保护的基类函数,从派生类通过基类ptr
- openv Ptr类.指针对象在调用函数后被删除
- 函数PTR转换为带模板参数的函数
- 删除从函数返回的唯一ptr
- 具有基类唯一ptr的类的复制构造函数