私は Flash で作業しており、Flash Player で利用可能な新しい「ドメイン メモリ」を使用しようとしています。これにより、基本的に低レベルでメモリを操作できますが、ガベージ コレクタが組み込まれていない C++ と同様に、自分でメモリを管理する必要があります。基本的なアロケーター/デアロケーターを作成しましたが、未使用のオブジェクトの割り当てを解除できるように、ガベージ コレクターまたは参照カウンターを作成する方法が必要です。次の例を見てください。
Rect stageRect = new Rect(0, 0, stage.width, stage.height);
// syntax is for understanding only
// actually would allocate memory using my handwritten allocator
新しいものを作成Rect
し、クラス メンバー var に格納しました。ここで、このオブジェクトに対していくつかの四角形の計算を実行し、さらに 2 つのオブジェクトを作成するとします。
Rect quarterRect = stageRect.halfWidth().halfHeight();
ご覧のとおり、Rect
返された byhalfWidth
は未使用であり、ガベージ コレクションが可能です。
によって作成された最終的な rectは、後で必要になるhalfHeight
var に格納されます。quarterRect
このような未使用のオブジェクトを検出し、それに応じて処分するにはどうすればよいですか? Reference Counting、 Smart Pointers、GC for C++ について読んできましたが、参照が使用されていないことを検出して参照カウントを減らす方法がまだわかりません。ref カウントをインクリメントするのは簡単です。別の var をこのオブジェクトを指すように設定すると、つまり:a = stageRect
は の参照カウントを増やす必要がありますが、が未使用のstageRect
場合はどうすればわかりますか? a
参照カウントを減らすには?a = null
通常、最新のコードで設定を回避することはありません。プラットフォームが未使用の参照を検出して破棄することを期待するだけです。