参照カウントとは正確には何ですか?特に、C++ の場合は何ですか? それらを処理しないと、どのような問題に直面する可能性がありますか? すべての言語で参照カウントが必要ですか?
4 に答える
参照カウントとは正確には何ですか?特に、C++ の場合は何ですか?
簡単に言えば、参照カウントとは、オブジェクトへの参照をカウントすることを意味します。
通常、C++ はRAIIの手法を採用しています。ここで、型オブジェクトの割り当て解除を管理する機能は、型オブジェクト自体に結び付けられています。これは、ユーザーがオブジェクトの有効期間とその割り当て解除を明示的に管理する必要がないことを意味します。この管理を行う機能は、オブジェクト自体に組み込まれています。
この機能は、オブジェクトを参照する利害関係者が存在するまでオブジェクトが存在し、有効であり続けることを意味します。これは、参照カウントによって実現されます。オブジェクトが共有 (コピー) されるたびに参照カウント (通常はクラス型内のメンバー) がインクリメントされ、デストラクタが呼び出されるたびにカウントがデクリメントされます。カウントが 0 に達すると、オブジェクトは誰からも参照されず、その寿命の終わりを示しているため、破棄されます。
それらを処理しないと、どのような問題に直面する可能性がありますか?
それは、RAII がなくなることを意味します。
要するにプログラミングの悪夢。
すべての言語で参照カウントが必要ですか?
言語は参照カウントを必要としませんが、この手法を使用すると、言語のユーザーにとって非常に簡単に使用でき、労力が少なくなります。したがって、ほとんどの言語は、これらの利点をユーザーに提供するために使用することを好みます。
参照カウントは、ガベージ検出の単純なアプローチですが、完全ではありません。
カウンターがゼロになると、そのオブジェクトを解放できます。
しかし、相互に循環参照する使用済みオブジェクトがなくなった場合、それらは決して解放されません。
aが b を参照し、b が a を参照しているが、 a または b を他に参照していないとします。a と bの参照カウントは 1 のままです (= 使用中)
参照カウント ガベージ コレクションは、メモリを管理するための強力な手法であり、オブジェクトが誤って削除されたり、複数回削除されたりするのを防ぐのに役立ちます。この手法は C++ コードに限定されるものではなく、その名前にもかかわらず、参照変数の C++ の概念とは無関係です。むしろ、この用語は、オブジェクトへのすべての「所有参照」のカウントを維持し、このカウントがゼロになったときにオブジェクトを削除することを意味します。
参照カウント - 比喩を使用しましょう。
あなたには耳があります。あなたはある時点でそれを取り戻したいと思っています。
あなたの耳を指さしている人々のグループを取得します。彼らが指さすとすぐに数えます。
数字がゼロになると、それはあなたのものであり、好きなように処理できます。
つまり、式から外します (解放してメモリに戻します)。
ところで。円形のものは見つけにくいです。