0
我有一個Entity
類定義了一個lib和Registry
這是一個類,管理實體註冊到它與地圖。如何將shared_ptr傳遞給裸ptr函數
我想要做的事:
//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',這很容易),或者根本不聲稱擁有所有權。無論哪種方式,它稱爲「刪除」的事實是問題。 – GManNickG
您顯然需要定義您的所有權語義。你說'Registry' *管理實體,但是,你的'GameLogic'似乎也會將'shared_ptr'存儲到這些實體中。 – Xeo