catch throw php コレクションを試してください
私の個人的な理解は次のとおりです:?
1. private または protected メンバー関数では try または catch を使用せず、throw?
2 のみを使用してください。プライベートまたは保護されたメンバー関数で try または catch を使用する必要がある場合は、rethrow?
3 を使用します。パブリックメンバー関数で try, catch?
4 を使用します。クラスがプロジェクト全体に対して相対的に呼び出されたレイヤーに属している場合、パブリック メンバー関数は try、catch?
5 を使用する必要はありません。サードパーティのコードを呼び出す場合、通常は try、catch?
class CTest1;?
class CTest2;?
class CTest3;?
void BadCode()?
を使用します。 {?
? //定義?
? CTest1 * pTest1 = NULL;?
? CTest2 * pTest3 = NULL;?
? //try、catch、throw?
? //new test1?
? //何かをしますか?
? bool = DoSomething();?
? if (!bRet)?
? new CTest2?
? pTest2 = new CTest2;?
? bRet = DoSomething();?
? ?
?
? //新しい CTest3;?
?
? //何かする?
? //解放する? pTest1;?
? pTest1 = NULL;?
? pTest2 = NULL;?
? pTest3 = NULL; }?
??
? if (pTest1)?
? 🎜>??pTest2;?
???
}
? -------------------------------------- ----- ------------------
(1) try に throw がなく例外がスローされた場合、catch は例外をキャッチできないことを意味しますか? 不可解に例外をスローすることは不可能です。
たとえば、if(..) は次のようになります。そうであれば、これらの try catch は何のためにあるのでしょうか?これは不要ですか? if 文の直後に記述してください。
(2) try に throw がない場合、catch はどのように例外をキャッチしますか?これは非常に不明確です。try で例外が発生した場合、誰が catch に通知するのでしょうか。
(3) 投げると何ができるの?
。try でライブラリ関数が呼び出され、その関数が例外をスローした場合、ここでキャッチされます。この状況を自分で判断することはできません
throw は例外を生成します。この例外は関数呼び出しレベルに沿って段階的に上昇し、最も近い catch によって処理されます。キャッチがない場合は、最終的にオペレーティング システムによってキャッチされます
2.try のコード。ブロックは例外がスローされたことを示していない可能性がありますが、内部で呼び出された関数が例外をスローする可能性があります。それをキャッチする方法には例外処理システムの実装が含まれ、具体的な答えは専門家に委ねられます。
3.throw は次のとおりです。指定された例外をスローします。もちろん、プログラム内の他の場所で例外をキャッチして処理することもできます。この場合、通常、プログラムはすぐに終了して終了します。
try のコードセグメントが例外をスローしない場合 (呼び出された関数が例外をスローする可能性があります)、catch は確かに例外をキャッチできません。 if の代わりに try catch を使用すると、深いネストからすぐに抜け出すことができます。コードをより明確にすることができます。
(2)
1 では、呼び出された関数で例外がスローされた場合、C++ は (リターンを介さずに) 呼び出しチェーンに沿ってトレースバックする可能性があると述べました。 、最初の try ブロック
を見つけてから、対応する catch を見つけます。例外が catch で処理できる場合 (型が一致し、... はすべての例外を処理します)、catch ブロックは例外を処理し、続行します。通常どおり、下に進み、通常の関数呼び出しのリターン チェーンに戻ります。 try または catch ブロックが見つからない場合、C++ の「未処理例外キャッチャー」が呼び出されます。この関数ポインターを設定すると、そのデフォルトの動作はプログラムを終了します。
(3) throw の目的は例外をスローすることです。Return は通常の戻りに使用され、throw は例外に使用されます。このようにして、プログラムは戻り値の処理に集中できます (ここでの戻り値は C とは異なり、それぞれの戻り値は正しいですが、意味が異なり、C の戻り値はエラーを表す場合があります)。 catchブロックの処理、コードロジックに集中するとより明確になります