atexit
ライブラリなどの大規模なプロジェクトでの使用に固有の危険性はありますか?
atexit
もしそうなら、大規模なプロジェクトで問題を引き起こす可能性がある背後にある技術的な性質についてはどうですか?
atexit
ライブラリでの使用を避ける主な理由は、その使用にはグローバルな状態が含まれるからです。優れたライブラリは、グローバルな状態を避ける必要があります。
ただし、他の技術的な理由もあります。
実装は、少数 (32 だと思います) のatexit
ハンドラーをサポートするためにのみ必要です。その後、すべての呼び出しがatexit
失敗するか、リソースの可用性に応じて成功または失敗する可能性があります。したがって、ハンドラーを登録できない場合にどうするかを検討する必要がありatexit
、続行する良い方法がない可能性があります。
atexit
ライブラリを動的にロードする他のメソッドとの相互作用はdlopen
定義されていません。ハンドラーを登録したライブラリーatexit
は安全にアンロードできず、実装によってこの状況に対処する方法が異なる場合があります。
適切に記述されatexit
ていないハンドラーは、プログラムが適切に終了するのを妨げる、相互に作用したり、不適切な動作をしたりする可能性があります。たとえば、atexit
ハンドラーが別のスレッドに保持されていて、呼び出し時の状態のために解放できないロックを取得しようとした場合exit
。
atexit
Secure CERT には、正しく使用されていない場合に関するエントリがあります。
ENV32-C。すべての atexit ハンドラは正常に戻る必要があります