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を保持しているので、これを処理する方法を理解しようとしています。その後、ポインターを渡す必要があります。

もう 1 つのことは、レジストリが何らかの理由で破壊された場合delete、マップに残っているすべてのエンティティを呼び出すことです。

私が合格した場合entityは機能しますが、weak_ptr で呼び出しが削除されたweak_ptr<Entity>(entity)場合に何が起こるかという点で何が起こっているのかを完全には把握していません。Registry

そして、パスした場合、参照カウントentityentity.get()ゼロに達するか、レジストリがそれを削除しようとするとどうなりますか。

4

1 に答える 1

3

互換性のない所有権スキームが 2 つあります。

それらのいずれかを変更するか、あるスキームから別のスキームに転送する必要があるオブジェクトを複製する必要があります。

shared_ptrオブジェクトへの参照が 1 つしかない場合にa を解放するためのトリックがあります。しかし、あなたはそれをしたくありません。図書館の内部について十分に知っていても、それを行うことができます。

したがって、実用的な解決策として、レジストリを変更してください。

かかるようにしshared_ptrます。

于 2012-10-06T17:30:46.577 に答える