コードは通常、メモリ、ファイル、デバイス、ソケット接続、サービスなどのリソースへのハンドルや参照を「オープン」する必要があります。コードがリソースの使用を終了すると、一般的にリソースを「クローズ」または「リリース」することが期待されます。これは、リソースが無関係のプロセスまたはアクターによって、あるいは場合によっては同じプロセス内で再割り当てまたは再利用できることを環境(OSなど)に示すものです。この解放には、C/C++のfree()やdelete()、多くの言語で使用されているファイルハンドルclose()などのAPI関数やその他の抽象化機能がよく使用されます。
残念ながら、このようなAPIの実装や設計は、開発者がリソースのリリースごとに一度だけAPIが呼び出されることを保証する責任を負うことを期待する場合があります。もし開発者が同じリソース/ハンドルを複数回解放しようとすると、APIの期待に応えられず、未定義かつ/または安全でない動作が発生します。これは、メモリ破壊、データ破壊、実行パスの破壊などの結果につながる可能性があります。