请帮助:我知道析构函数和 atexit() 并且也知道以下内容: atexit() 注册一个要在程序终止时调用的函数(例如,当 main() 调用 return 或 exit() 在某处显式调用时)。
当调用 exit() 时,静态对象被销毁(调用析构函数),但不是局部变量范围内的对象,当然也不是动态分配的对象(只有在显式调用 delete 时才会被销毁)。
下面的代码给出的输出为:atexit handler Static dtor
你能帮我知道为什么当我们使用 atexit() 时不会调用本地对象的析构函数吗?
提前致谢:
class Static {
public:
~Static()
{
std::cout << "Static dtor\n";
}
};
class Sample {
public:
~Sample()
{
std::cout << "Sample dtor\n";
}
};
class Local {
public:
~Local()
{
std::cout << "Local dtor\n";
}
};
Static static_variable; // dtor of this object *will* be called
void atexit_handler()
{
std::cout << "atexit handler\n";
}
int main()
{
Local local_variable;
const int result = std::atexit(atexit_handler);
Sample static_variable; // dtor of this object *will not* be called
std::exit(EXIT_SUCCESS);//succesful exit
return 0;
}