2017-03-28 8 views
4

C++ 11以降では、std::quick_exitを呼び出してプロセスを終了することができます。つまり、デストラクタは呼び出されません。中] std::quick_exitC++ 98で巻き戻さずにプロセスを終了する方法は?

は、私はプロジェクトを持っている:

  1. それはグローバルオブジェクトを持ち、グローバルオブジェクトのデストラクタでの致命的なバグがあります。
  2. グローバルオブジェクトのソースにアクセスできません。
  3. mainの最後の行にあるstd::quick_exitを呼び出せば、バグは発生しません。
  4. 何らかの理由で、プロジェクトをC++ 98コンパイラでコンパイルする必要があります。すなわち、私はstd::quick_exitをC++ 98コンパイラに呼び出すことはできません。要するに

:C++ 11のstd::quick_exitと等価であるC++ 98でどのような機能

Windowsでは、ExitProcess(0)に電話をかけて、クリーンアップをせずに強制的にプロセスを終了できます。

Linuxでの対応は?

+4

'_exit()'を試してください。これは、C++ 11以前の標準では明確に文書化されていませんが、グローバルデストラクタを呼び出すことも回避する必要があります。 – Rene

答えて

3

abort()<cstdlib>から使用できます。 SIGABRTをプロセスに送信し、シグナルが捕捉されない場合は、atexit()やデストラクタのような破壊ルーチンを呼び出さずにプログラムを終了させます。ここ

さらに詳しい情報:link

編集:通常std::quick_exit終了それが問題だ場合、異常終了でabort()結果を呼び出すのに対し、知りません。

関連する問題