atexit() in C++ Klasse

Hi,

mal folgendes

Code:
void func(void){
	std::cout<<"at exit\n";
}

static void sig_hdl(int signr){
	std::cout<<"signal "<<signr<<std::endl;
	exit(EXIT_FAILURE);
}

class T{
	public:
		T(){
			atexit(func);
		}
		~T(){
			std::cout<<"dtor()\n";
		}
	protected:
		void t_func(void){
			std::cout<<"at exit\n";
		}
};

int main(void){
	T t;
	signal(SIGTERM,sig_hdl);
	signal(SIGKILL,sig_hdl);
	signal(SIGINT,sig_hdl);
	char c = getchar();
	return 0;
}

Dieses Programm macht, was ich will, wenn ich eine Taste drücke, d.h. atexit und der Destruktor werden aufgerufen, wenn ich jedoch ein KILL signal schicke, wird nur atexit aufgerufen und nicht mehr der destruktor, den ich aber brauche zum "sauber machen".

Wie kann ich mit atexit ( oder irgendwie anders ) es so hinbekommen, dass für die Klasse T eine Funktion 100% aufgerufen wird, egal ob ich ein Signal schicke oder es requlär zu Ende geht.

Ich kann leider keine statische Methode für die Klasse T machen

?(
 
Exit und co sollte man in C++ Programmen nicht verwenden warum steht bei google. Als Lösung für dein Problem wenn ich es richtig verstanden habe:
mach einen Pointer T* t = new T; und im Signalhandler lösch du den mit delete dann wird der Destruktor in jedem Fall aufgerufen.
 
Die Lösung mit T*t = new T; finde ich nicht besonders "schön". Ich muss ja so einen Entwickler zweingen, immer mittels new ein Object anzulegen. Es muss doch irgendwie eine vernünftige Möglichkeit geben, Destruktoren aufzurufen ( ausser per Hand ) bzw. dafür die sorgen, dass der Code im Destruktor aufgerufen wird, wenn man ein Programm killt oder abbricht.
 
Zurück
Oben