我想在类中使用std :: atexit函数来清除异常终止。 我在类构造函数中注册函数句柄但是收到错误。 (codetest.cpp:12:25:错误:无效使用非静态成员函数) 这是我理解的简单代码(其他它是一个大项目,其中应用程序退出一些致命的错误,但我需要清理mu类的一些属性)
#include <iostream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
class cleanUP
{
public:
cleanUP ()
{
atexit (atexit_handler);
}
~cleanUP()
{
}
void atexit_handler ()
{
// Will cleanup some temp files and malloc things.
cout << "Call atexit" <<endl;
}
};
int main () {
cleanUP cleanup;
}
还有其他好的清理方法吗? 谢谢。
答案 0 :(得分:0)
您的问题是std::atexit
只能在类中注册真(未绑定)函数或静态方法,而不能注册非静态方法。
如果您不需要指向对象的指针,最简单的方法是使处理程序保持静态:
static void atexit_handler ()
{
// Will cleanup some temp files and malloc things.
cout << "Call atexit" <<endl;
}
但无论如何,如果你创建了多个对象,你将多次注册相同的处理程序,这至少是无用的。如果你真的想要(或需要)这样做,你应该:
但是惯用的清理方法只是使用析构函数,并确保在程序退出之前正确删除所有动态对象。