まず、私の実際の質問
マップに共有ポインターがあります。マップ自体に共有ポインター以外の参照がない場合、その共有ポインターをマップから削除したいので、ターゲットが解放されます。これどうやってするの?または、私の問題を解決するためのより良い設計は何ですか?
以下の背景:
懐かしさから、MySQL バックエンドを使用して C++ で MUD エンジンを作成しています。私は現在、エンティティ (このコンテキストではアカウント、キャラクターなど) を永続化する段階にいます。これを実装する最善の方法を見つけるのに少し苦労しており、アドバイスを求めることにしました。
私の現在の永続化アーキテクチャは次のようになります。例としてキャラクターを取り上げます
文字エンティティ -> 文字ストレージ -> 文字永続性 -> MySQL
文字エンティティは文字自体を指し、MVC のモデルに似ています。データ以外は何も持っておらず、他のエンティティについてのみ知っています。
キャラクター ストレージは、現在、キャラクター エンティティのインスタンスをメモリに保持する役割を果たしているコンテナーです。ID または名前で文字を検索する要求が行われると、UUID を含む std::string の std::shared_ptr へのマップとして実装されているメモリがチェックされます。インスタンスがすでにメモリ内にある場合は、共有ポインターを返します。そうでない場合は、永続レイヤーにそれを要求し、それをマップに格納してから共有ポインターを渡します。
永続層は抽象的で、mysql_character_persistence の具体的な実装を持つ character_persistence インターフェイスがあるため、さまざまな形式の永続性に簡単に切り替えることができました。