2つの質問 1)オブジェクト/変数をスローしてキャッチするとどうなりますか?たとえば、オブジェクト/変数をスローするとどうなりますか?
int foo() {
FILE *fp = ....;
int dummy = 10;
int *dummy_ptr = new int[10];
throw 1;
}
int main() {
try {
foo();
} catch (int &i) {
std::cout<<"ERROR, the value is "<<i<<std::endl;
}
}
ここではどうなりますか?新しい変数が作成されて渡されました???私は、(i int型) キャッチ(int型* I)//またはキャッチのように参照
なしポインタまたは変数を使用する場合
また、すべての変数/リソースが宣言された、または開始されないものを
スコープ内は解放された/閉じられましたか?
2)もし私が参照なしに再転居すれば、2番目のキャッチは新しい変数を得ることができるので、参照のために再スローする予定がある場合は キャッチ(& I int型)//プリント私の判断から、2 キャッチ(I int型)//プリント1
、
:中間スローは....int goo() {
throw 2;
}
int foo() {
try{
goo();
} catch(int &i) { // (or) catch(int i) // i is not changing in the next line.
i = 2;
throw;
}
}
int main() {
try {
foo();
} catch (int &i) {
std::cout<<"ERROR, the value is "<<i<<std::endl;
}
}
OUTPUTに影響されません
私が考えているのは、参照である限り、値が中間ステップで '値渡し'の場合は、値に影響します。 元のオブジェクトを2番目のキャッチにスローします。
変数の制御フローは、このような状況では.....
は理にかなっていますが、私はその正当な理由は考えていません...... ...何かがヒープ/スタックとそれ以降何かが間違っている、それを削除しないのは何ですか?スタックでは正常に動作しますが、ヒープでは動作しません。そしてここにすべてのものが作成された後、何か別の場所から渡されたものではありません......... – howtechstuffworks
@howtechstuffworksヒープ上に物を作成するのは、その機能を残した後にそれらを永続させたいからです。 –
^ええジェームズ、一般的なthats .......しかし、あなたの機能が失敗した場合は何点:......あなたはロールバックするすべてをしたくないですか? – howtechstuffworks