12

ガベージ参照とダングリング参照の違いは何ですか?

4

3 に答える 3

25

ダングリング参照は、存在しなくなったオブジェクトへの参照です。ガベージは、参照を通じて到達できないオブジェクトです。

ガベージ コレクション言語にはダングリング参照は存在しません。これは、オブジェクトがアクセスできなくなった場合にのみオブジェクトが再利用されるためです (ガベージのみが収集されます)。一部の言語またはフレームワークでは、「弱い参照」を使用できます。これは、コレクション パス中に考慮されないため、ぶら下がったままにすることができます。

C や C++ などの手動メモリ管理を行う言語では、たとえば次のようにすると、ダングリングポインターが発生する可能性があります。

int * p = new int;
delete p;

int i = *p; // error, p has been deleted!
于 2011-05-05T15:19:21.993 に答える
3

ダングリング参照は、もう存在しないオブジェクトへの参照です。

ガベージと見なされるものは、ガベージ コレクターの実装によって異なります。

トレース GC と参照カウント GC の両方で、ダングリング参照は存在できません (GC 実装のバグがない限り)。これらの要素のみが、参照が存在しないガベージ コレクションの対象と見なされるためです。

したがって、ダングリング参照は、手動でメモリを管理するシステムでのみ問題になります。

于 2011-05-05T15:26:34.320 に答える