その質問に対する一般的な答えは、を使用すること::std::shared_ptr
です。または、それがない場合、、またはない::std::tr1::shared_ptr
場合は、::boost::shared_ptr
。
あなたの特定のケースでは、私はいくつかの異なるアプローチの1つをお勧めします:
もちろん、1つの可能性はshared_ptrアプローチです。基本的に、オブジェクトを必要とするすべての人にポインタを渡し、オブジェクトが不要になると自動的に破棄されます。テクスチャマネージャがそれを指すオブジェクトへのポインタで終わる場合でも、参照サイクルを作成しているので、それは非常に注意深く処理する必要があります。
もう1つの可能性は、それをローカル変数として宣言し、それmain
を必要とするすべての人へのポインターまたは参照として渡すことです。プログラムがそのように終了するまでそれは消えません、そしてあなたは生涯を管理することについて心配する必要はありません。この場合、ベアポインタまたは参照で問題ありません。
3番目の可能性は、シングルトンのようなものの漠然と受け入れられる使用法の1つです。そして、これは詳細な説明に値します。
あなたは、物事への有用なポインタを配ることが唯一の仕事であるシングルトンを作ります。それが持っている重要な機能は、ポインタを渡すものを指示する機能です。これは、グローバルに構成可能なファクトリのようなものです。
これにより、一般的にシングルトンで作成する巨大なテストの問題から逃れることができます。テストするときは、スタブオブジェクトへのポインタを渡すように指示するだけです。
また、同じ理由でシングルトンが表すアクセス制御/セキュリティの問題(はい、セキュリティの問題も発生します)から逃れることができます。実行しようとしているコードのセクションがアクセスする必要のないものへのアクセスを許可しないオブジェクトへのポインターを渡すように一時的に指示することができます。この考え方は、一般的に最小権限の原則と呼ばれます。
これを使用する主な理由は、ポインターが必要な人を見つけて、ポインターを渡すという問題を回避できることです。これは、スルーがあなたにとって良いことだと考えて、それを使用しない主な理由でもあります。また、テクスチャマネージャへの同じポインタを取得することを期待していた2つのものが、予期していなかった制御フローのために、実際には異なるテクスチャマネージャへのポインタを取得する可能性を紹介します。これは、基本的に、あなたを引き起こしたずさんな思考の結果です。そもそもシングルトンを使うこと。最後に、シングルトンは非常にひどいので、このより良性の使用でさえ私をかゆくさせます。
個人的には、あなたの場合、アプローチ#2をお勧めします。スタック上に作成し、main
必要な場所へのポインターを渡すだけです。それはあなたにあなたのプログラムの構造についてより注意深く考えさせるでしょう、そしてこの種のオブジェクトはおそらくあなたのプログラムの生涯を通して生きているはずです。