例外オブジェクトがどのように作成されるのか知りたいですか?また、ハンドラー関数パラメーターが非定数参照になる可能性があるのはなぜですか?
例えば:
class E{
public:
const char * error;
E(const char* arg):error(arg){
cout << "Constructor of E(): ";}
E(const E& m){
cout << "Copy constructor E(E& m): " ;
error=m.error;
}
};
int main(){
try{
throw E("Out of memory");
}
catch(E& e){cout << e.error;}
}
出力:
E()のコンストラクタ:メモリ不足
したがって、私は一時オブジェクトであり、コピーコンストラクタが呼び出されていない場合を除いて、オブジェクトは作成されてthrow E("out of memory")
いません。したがって、これは単なる一時オブジェクトですが、非定数参照を受け取るハンドラーがあります。E("out of memory")
E("out of memory")
E("out of memory")
なぜこれが可能なのか説明してもらえますか?