このイディオムについて私が理解しているのは、リソースを使用するオブジェクトがスコープ外になった後にリソースが確実に解放されるため、便利だということです。
言い換えれば、それはde-acquisitionとde-initialisationに関するものですが、なぜこのイディオムはそのように名付けられたのでしょうか?
このイディオムについて私が理解しているのは、リソースを使用するオブジェクトがスコープ外になった後にリソースが確実に解放されるため、便利だということです。
言い換えれば、それはde-acquisitionとde-initialisationに関するものですが、なぜこのイディオムはそのように名付けられたのでしょうか?
最初に、これはよくない名前のイディオムだと広く考えられていることに注意してください。多くの人は、Stack Bound Resource Management の略である SBRM を好みます。「RAII」が広く知られ、使用されているという理由だけで (しぶしぶ) 私は「RAII」を使用することに同意しますが、SBRM のほうが本当の意図をよりよく説明していると思います。
第 2 に、RAII が新しかった頃は、リソースの解放だけでなく取得にも適用されていました。特に、当時は、初期化が 2 つのステップで行われるのがかなり一般的でした。最初にオブジェクトを定義し、後でそのオブジェクトに関連付けられたリソースを動的に割り当てます。多くのスタイル ガイドがこれを推奨していましたが、その主な理由は、当時 (C++ に例外処理が導入される前)、コンストラクターでの失敗を処理する適切な方法がなかったからです。したがって、スタイル ガイドではよく、コンストラクターは最低限の作業のみを行うべきであり、特にリソースの割り当てなど、失敗する可能性のあるものはすべて避けるべきであると述べられています (今でもそのようなことを言う人は少数です)。
ただし、それらのかなりの数は、デストラクタでリソースの解放を既に処理しているため、以前の慣行との明確な違いはありませんでした。