2012年2月16日木曜日

じっけ〜〜〜ん!!!

C++のコードでちょっと気になる事があったので、
実験してみました^^

それは何かというと、

「deleteではexceptionが発生するか否か」

です。




#include <iostream>
class B {
public:
~B(){
throw "...";
};
private:
int b;
};
class A {
private:
B memberB;
};
int main (void)
{
A* a = new A;
try {
delete a;
}catch(...) {
std::cout << "exception occured" << std::endl;
}
return 0;
}





結果は、
exception occurred
が表示されました。
gccにて実験したのですが、バージョンは

i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1

です。

もちろん上のコードは、デストラクタで例外をスローする
という、C++上やってはいけないコードです!
(その他にもnewをtry-catchで囲んでいないってのもありますね^^;;;)

やっぱり安全とわかっているstdなど以外は、クラスのメンバ
に別なクラスのインスタンス実体を持つコードは
ちょっと怖いかなって思いました^^;;;