- ベストアンサー
グローバル初期化されるインスタンスからの例外をcatchする方法。
表題の通りですが、グローバルに初期化される インスタンスは、mainより前にコンストラクタが呼ばれると 聞きました。ならば、そこで例外を投げたらそれをcatchする 方法はあるのだろうか?という疑問です。 /*main.cpp*/ class GlobalInit { public: GlobalInit() {throw "これはどうしてもcatchされない?";} }globalInit; int main() { return 0; } 自分は、多分方法は無いだろうと考えているのですが、 初期化リスト内の例外はcatchできるなど、意外なところで 使えるようですので、もしかしたらとも思っています。 回答をご存知の方がいらっしゃいましたら、ご教授よろしくお願いします。 環境はXPのVC9です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- chie65536(@chie65535)
- ベストアンサー率44% (8812/19983)
回答No.2
お礼
「terminate()が呼ばれる?そんな馬鹿な。」と思ったのですが、 #include <cstdio> /*main.cpp*/ class GlobalInit { public: GlobalInit() {throw "これはどうしてもcatchされない?";} }globalInit; void terminate() { puts("terminate()"); } int main() { return 0; } おお、確かに呼ばれますね。 これが、まさに知りたかったことです。ありがとうございます。 今から、参考URLも読んでみます。 #main,winmain以外でソース以外から呼ばれるような仕組みが #あったということに驚きました。