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

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

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

ID

問題箇所

説明

1

例外のスロー

例外がスローされた場所

2

定義

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

          
#include <stdio.h>

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

// Global variable that will throw exception when
// torn down during program exit
Bomb myBomb;

int main(int argc, char **argv)
{
    printf("goodbye, world\n");
    // program blows up after return from main
}
        

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