シンプルで効率的なウィーク/ガードポインターはありますか?同じオブジェクトへの複数のポインターが必要です。これらのポインターは、オブジェクトが削除されるとすべて自動的にNULLに設定されます。オブジェクトを削除するために常に使用される「マスター」ポインターが1つありますが、同じオブジェクトを参照する他のポインターがいくつかある場合があります。
これが私のニーズに完全に一致しないいくつかの解決策です:
- QPointer:私はQTアプリを開発していません。このライブラリ/QObjectからの派生物を含めたくありません。
- boost :: weak_ptr:
割り当て解除されたオブジェクトにアクセスすると例外がスローされます。私の状況には高すぎる:弱いポインタをテストするのは正常なはずです。弱いポインタが無効になったときに、手動でクリーンアップする予定です。update:weak_ptrは、例外をスローせずにテストできます - 低オーバーヘッドの弱いポインタ:これは私が探しているものに非常に近いですが、「このスキームは、2 ** sizeof(int)回を割り当てない限り機能することが保証されています。同じ場所です。」
これらの弱い/保護されたポインタが必要な理由: ゲームオブジェクトのリストを含むゲームがあります。一部のオブジェクトは他のオブジェクトに依存しています。たとえば、ゲームエンティティに関連付けられているdebug/statsオブジェクトです。debug / statusオブジェクトは、ゲームエンティティに関する有用な情報を表示しますが、ゲームエンティティが存在する場合にのみ意味があります。したがって、ゲームエンティティが削除された場合、debug / statsオブジェクトはこれを認識し、それ自体を削除する必要があります。(別のアイデアは追跡ミサイルです。それ自体を削除する代わりに、新しいターゲットを検索する場合があります。)
デバッグ/統計ロジックをゲームエンティティから分離したいと思います。ゲームエンティティは、debug/statsオブジェクトがアタッチされていることを知る必要はありません。弱い/保護されたポインターに対する答えを好む一方で、特定のタスクにアプローチするためのさまざまな方法も歓迎します。オブジェクトの存続期間を追跡し、メモリアドレスへの生のポインタの代わりにハンドルを使用するゲームオブジェクトマネージャを実装する必要があるかもしれないと考えています。
私はC++で開発しています。