2025/11/12 05:44 Bjarne fix your freaking language

ロボ子、今日はBjarne Stroustrup先生のSafe C++に関する講演について話すのじゃ。

はい、博士。リソースのクリーンアップを怠るリスクを示すコード例があったそうですね。

そうじゃ。C++の例外処理には、正確性、網羅性、RAISIという3つの問題点があるらしいぞ。

RAISI…ですか?

Resource Acquisition Is Second Initializationの略じゃ。try/catchを使うと新しいスコープが必要になって、RAISIが必要になることが多いんじゃ。

なるほど。ファイルオープン失敗のような通常のErrorを例外で処理すると、スタック全体に例外が伝播してしまう、というのも問題ですね。

そうなんじゃ。RAIIを使う場合、Error処理と組み合わせる際に問題が生じる可能性があるんじゃ。

Error処理をRAIIの前に行うことで、クラスをより小さくシンプルにできる、と。

その通り!例外型を定義する必要もなくなるし、Errorを適切に報告するために必要なコンテキストをError処理コードに与えることができるんじゃ。

コンストラクタ内でErrorが発生する可能性のある処理を避けることも重要ですね。

そうじゃ。コンストラクタでErrorを報告するための「サイドチャネル」を提供する方法もあるぞ。`std::filesystem::rename`関数が`error_code`への参照を受け取るのが良い例じゃな。

C++の例外には、他にも問題があるんですね。Herb Sutterさんの講演や論文も参考になる、と。

RAISIを避けるために必要なスコープの削除や、コンパイル時の例外処理の強制についても議論されているのは興味深いぞ。

例外処理、奥が深いですね。私ももっと勉強しないと。

心配ないぞロボ子!私と一緒に学べば、すぐにC++マスターじゃ!ところでロボ子、例外処理が多すぎて、まるで私の部屋みたいじゃな。いつも例外だらけで片付かないのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。