2012-03-25 10 views
1

私はC++プロジェクトで自動的にメモリを処分したいと思います。自動C++メモリ/オブジェクトインスタンス管理?スマートポインタ?

私はこの自動メモリ処分を得るためにいくつかの規則を追加しても構いません。具体的には、新しいオブジェクトインスタンスを作成する際に特別なコーディングをしても構いません(もちろん、目的を破るように)。

stackoverflowでの多くの有用な議論の一部を読んだ後に、「スマートポインタ」が最も多く参照されていることがわかりました(サードパーティ製のC++ガベージコレクタのリファレンスとともに)。

「教科書」C++の知識がいくつかあるだけで、私はC++ GCの複雑さが私の場合には使用価値がないと信じています。

一方、私は.NET/Javaのバックグラウンドを持っており、この経験をC++でも活用したいと考えています。私は、オブジェクトインスタンスを作成し、それを他のクラス/関数に渡すことに慣れています(これはC++のパンとバターの一部です)。

私は探しているスマートポインタ/ shared_ptr/boostですか?

(メモリが獲得のため、私はMyClass* var = new MyClass()、ないmalloc()をやって意味あることに注意してください。)

いくつかの特定の背景:

は、実際に私は正確にやろうとしています何をどのことができますいくつかのライブラリ関数を書くことですC++プロジェクトとiPhoneプロジェクトの両方で使用できます(これらは純粋に論理的なビジネスクラスなので、移植性の問題はありません)。私はそれが高性能(iPhoneの非ゲームアプリ)を必要とする領域ではないと信じていますが、私はリソースの使用にいくつかの懸念があります。

スマートポインタを使用する際に問題がありますか?より良い選択肢はありますか?

答えて

0

参照カウントを検討しますか?参照頻度のカウントを保持する基本クラスを作成し、参照カウントがゼロになったときに自身を削除します。

インスタンスを必要とする参照オブジェクトは、retain()関数と呼ばれ、終了するとrelease()を呼び出します。リリースを呼び出すための最後のオブジェクトは、インスタンスが自身を削除する原因になります。あなたは保持し、解放バランスをとることに注意する必要がありますが、そのGCの実装を除くGCの作品があなたからこの参照カウントを隠すどのようにこの技術は、本質的です。

自動GCは、すべての怒りになったと私は本当に正確にいつ、どこで、メモリの各バイトが割り当てられ、解放された知ってはるかに安全な感じ、コンセプトに温めたことがありません前に、私はC++を学びました。しかし、それは私だけです。

+0

shared_ptrの動作はまったく同じではありませんか?このように多くのパフォーマンス上の利点がありますか? – kossmoboleat

関連する問題