グローバル・オブジェクト・コンストラクターによる例外のスロー

C++ コンストラクターは例外をスローすることができ、このクラス (またはこのクラスから派生したクラス) の少なくとも 1 つのスタティック/グローバル・インスタンスがあります。

実行ライブラリーやダイナミック・ライブラリーのロード時に実行されるスタティック・エラボレーションなど、例外が許可されていないコンテキストで例外がスローされる可能性があるため、この使用方法は安全ではありません。そのようなコンテキストで例外がスローされると、C++ ランタイムはアプリケーションを正常に実行できません。

ID

問題箇所

説明

1

例外のスロー

例外がスローされた場所

2

定義

コンストラクターが定義された場所

          
#include <stdio.h>

class Bomb { // bad class throws exception from constructor
public:
int x;
    Bomb() : x(0) { throw "boom"; }
    ~Bomb() { }
};

// Variable declaration that will throw exception
// during static elaboration before main is called
Bomb myBomb;

int main(int argc, char **argv)
{
    printf("hello, world\n"); // never gets here
}
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。