main函数atexit()可以注册一个函数在CRT函数返回后运行。我想知道使用它的典型场景是什么?(atexit)真的有必要吗?
发布于 2014-08-04 17:37:39
我猜它的主要用途是当你不能控制main的时候,你想确保在它的末尾调用了一些东西。
它有时被库使用,这些库不想坚持让用户程序在终止程序之前显式地调用它们的清理函数。
它也用在phoenix单例模式中(参见Andrei Alexandrescu的现代C++设计)。
发布于 2014-08-04 17:44:24
它可以用于您希望在每次应用程序关闭时执行的操作。通过使用它,您不需要通过在代码中找到的每个exit()之前添加所有清理代码来膨胀您的代码。
一些用例:
发布于 2014-08-04 19:44:40
atexit的主要用途之一是让库在程序退出时执行清理。请注意,在调用exit时调用atexit,在程序中止或崩溃时调用而不是,因此您无法在断言失败等情况下进行清理。如果程序调用exec,也不会调用它。
如果你有一个库可能出于某种原因调用exit,你可以直接在主程序中调用它。
请注意,您只能注册有限数量的atexit处理程序,其中' limited‘取决于您的操作系统,因此它将返回错误状态。
它赋予C程序类似于在C++中调用静态变量的析构函数的能力。
我用它来删除临时文件,或者(一两次)重置一些硬件寄存器。通常不需要使用它来关闭文件或租用内存,因为操作系统将为您完成这些操作。
https://stackoverflow.com/questions/25115612
复制相似问题