SDL_CreateRGBSurface
(または適切な派生構造体)の新しいインスタンスを割り当て、SDL_Surface
参照カウントをインクリメントします (1 に設定します)。
SDL_FreeSurface
参照カウントをデクリメントし、それがゼロかどうかをチェックします。そうである場合、それは他のオブジェクトがサーフェスを使用していないことを意味し、割り当てが解除されます。
また、SDL は、オブジェクトが別の場所 (レンダラーなど) で使用されるたびに、refcount がインクリメントされることも保証します。したがって、SDL_FreeSurface
が呼び出されたときに参照カウントが 0 以外の場合、他のオブジェクトがそれを使用している必要があります。その他のオブジェクトも、最終的にSDL_FreeSurface
はサーフェスを呼び出して解放します。
参照カウントを使用すると、サイクル収集ガベージ コレクターのオーバーヘッドなしでオブジェクトを安価に追跡できます。ただし、1 つの欠点は、循環を処理できないことです (たとえば、オブジェクト A が B への参照を保持し、B への参照を保持する場合)。そのような場合、他のすべての外部参照がなくなった場合でも、サイクルは関係するオブジェクトを存続させます。
refcounting を実装するには、refcount したい任意のオブジェクトに refcount フィールドを追加し、オブジェクトのすべての割り当てと割り当て解除が適切な refcount-maintaining インターフェイス (あなたが定義する必要があります)。最後に、オブジェクトまたは関数が refcount されたオブジェクトへの参照を必要とする場合、最初に refcount をインクリメントして (直接または何らかのインターフェイスを介して) 参照を取得する必要があります。完了したら、refcount をデクリメントする必要があります。