0

我有一个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上调用deleteweak_ptr<Entity>(entity)会发生什么。Registry

如果我通过了当引用计数达到零或注册表试图删除它时会发生什么entityentity.get()

4

1 回答 1

3

您有两个不兼容的所有权方案。

您需要更改其中一个,或者克隆应该从一个方案转移到另一个方案的对象。

shared_ptr当对象只有一个引用时,释放 a 有一个技巧。但你不想那样做。即使您对图书馆的内部了解足够多,也可以这样做。

因此,作为一个实际的解决方案,更改注册表。

让它采取一个shared_ptr.

于 2012-10-06T17:30:46.577 回答