smart_ptrが参照カウントされます。これにより、コードによって参照されなくなった時点でリソースの確定的な解放が可能になりますが、参照の割り当ては常にカウンタの更新を必要とし、循環参照が自動的に解放されず、メモリリーク、メモリマネージャがより頻繁に呼び出されます。
.NETのGCは、掃引コレクタです。メモリが解放されるべきであると感じる(通常はメモリ使用状況によってトリガされるが、確定的ではない)と感じるときはいつでも開始され、システム内のすべてのライブ参照のリストを作成することから始まる(CPUレジスタ、ネストされた参照など)。これは、ポインタ演算などを行うことができない管理された環境にあるため動作します。システムはすべての参照を追跡できます。ライブ参照のリストが作成された後、基本的には使用されていないすべてのメモリが解放されます。もちろん、これはちょうど基本的なスケッチです。管理されていないリソースの効率と管理のために、オブジェクト世代、ファイナライザなどのようなものがありますが、その仕組みの基本的な理解には重要ではありません。
IDisposableインターフェイスは、使い捨てパターンを実装するために使用され、決定的な方法で配置する必要があるオブジェクトを扱うときに役立ちます。パターンは、オブジェクトがもはや必要なくなったときにDispose()が明示的に呼び出され、アンマネージ・リソースやクローズ・ハンドルなどを解放し、メモリーを解放しないようにするためのパターンです。これは後でGCによって行われますが、リソースの確定的リリースが既に実行されているため、後でこの問題が発生することはありません。
+1です。私はこの質問が既に尋ねられていることを確かめてください:) –
私は何も処分する必要はないと言っていますか? –
あなたがしなくても、リソースは最終的に解放されます(つまり、IDisposableが正しく実装されている場合)。実際には、これは単なる安全ネットです。管理対象外のリソースをできるだけ早く解放する必要があります。 –