main()
アプリケーションがクラッシュした後 (または中断された後など) に作成されたオブジェクトを破棄する簡単な方法があるかどうかを知りたいです。コードを参照してください。
#include <iostream>
#include <signal.h>
#include <stdlib.h>
class TestClass {
public:
TestClass() { std::cerr << "Constructor" << std::endl; }
~TestClass() { std::cerr << "Destructor" << std::endl; }
};
void signal_handler(int signum) {
std::cerr << "Signal caught " << signum << std::endl;
exit(1);
}
int main() {
TestClass a;
struct sigaction new_action, old_action;
new_action.sa_handler = signal_handler;
sigemptyset (&new_action.sa_mask);
new_action.sa_flags = 0;
sigaction (SIGSEGV, NULL, &old_action);
if (old_action.sa_handler != SIG_IGN)
{
sigaction (SIGSEGV, &new_action, NULL);
}
// CRASH !!!
int* p = 0; *p = 0;
}
そのため、実行時にクリーンアップを行い、その後終了するシグナルハンドラーをインストールします。明らかに、これは大きなアプリケーションなので、(理論的に言えば) 一時ファイルを作成したクラスのデストラクタを呼び出したいと思います。
動的に割り当てて、signal_handler
(デストラクタを呼び出すために) 解放するのは簡単ですが、それには余分な作業が必要です。
また、グローバル オブジェクトである可能性もありますが、グローバルな初期化順序の問題を回避したい...