次のようなコードがあるとします。
resource = allocateResource();
try { /* dangerous code here */ }
finally { free(resource); }
ここで特定の言語について言及しているわけではありませんが、Java、C#、および C++ が良い例になると思います ( MSVC++ で__try
/を使用していると仮定します)。__finally
これは例外セーフですか?
個人的には、これは例外セーフではないと思います。ブロックに入る前に例外が発生した場合はどうなるでしょうか? try
その後、リソースがリークします。
しかし、私はこれを十分に見てきましたが、何かが欠けていると思います... 私は? それとも、これは本当に危険ですか?
編集:
例外をスローすることについて質問しているわけではありませんが、その関数が返された後、割り当てられる前にallocateResource
例外が発生する状況です。 resource