0

エンティティ コンポーネント システムのメモリ管理を設計する際に問題が発生し、設計の詳細についていくつかの問題が発生しています。これが私がやろうとしていることです(これらのクラスを除くすべてEntityは実際には仮想であるため、多くの異なる特定の実装があることに注意してください):

Programクラスには のコンテナがありますEntity。はProgramをループし、Entityそれぞれに対して update を呼び出します。また、いくつかSubSystemの もあり、ループスルーごとに更新されます。

それぞれEntityに 2 種類の が含まれますComponent。それらの寿命はエンティティに直接結び付けられているため、それらはすべてunique_ptr内部で所有されます。メソッドが呼び出されると、 Entity1 つのタイプUpdateableComponentが更新されます。Entity.update()2 番目のタイプSubSystemComponentは、それぞれの 内から更新されますSubSystem

ここに私の2つの問題があります。1 つ目は、一部のComponentが親の存続期間を制御することEntityです。これに対する私の現在の考えは、 内の内部フラグを変更するComponent関数を呼び出すことができるということです。次に、更新のループが終了した後、2 回目のループを実行し、最後の更新中に削除対象としてマークされたそれぞれを削除します。これが効率的かスマートな方法かはわかりませんが、 が更新されている間に死ぬという問題は回避できるはずです。parent.die()EntityProgramEntityEntityComponent

SubSystemComponent2 つ目の問題は、 内からを参照する方法がわからないことですSubSystem。それらはunique_ptrfrom insideによって参照されるため、 aまたは aEntityを使用できません。また、コンポーネントの所有者が死ぬと、標準ポインターがぶら下がってしまいます。これらの の内側に切り替えて、 の中で aを使用することもできます。shared_ptrweak_ptrEntityshared_ptrEntityweak_ptrSubSystemEntityComponent

だから2つのこと:

  • 最初のアイデアを有意義な方法で改善できますか?
  • weak_ptrで一種の機能を実装する簡単な方法はありますunique_ptrか、または単に切り替えてshared_ptr、に複数作成しないようにする必要がshared_ptrありSubSystemComponentます
4

1 に答える 1