繁体   English   中英

使用atexit功能的场景是什么?

[英]What's the scenario to use atexit function?

CRT函数atexit()可以在main函数返回后注册一个函数来运行。 我想知道使用它的典型场景是什么? 是( atexit )真的有必要吗?

我猜它的主要用途是当你无法控制main ,你想确保在它结束时调用某些东西。

它有时被库使用,它们不希望在终止程序之前,用户程序明确地调用它们的清理函数。

它也用于凤凰单身模式(参见Andrei Alexandrescu的Modern C ++ Design)。

它可以用于您需要执行的任务,每当应用程序关闭时。 通过使用它,您不需要在代码中找到的每个exit()之前添加所有清理代码来膨胀您的代码。

一些用例:

  • 清理临时文件夹
  • 打印内存转储

atexit的主要用途之一是库在程序退出时执行清理。 请注意,调用exit会调用atexit而不是在程序中止或崩溃时调用,因此您无法对断言失败等进行清理。 如果程序调用exec也不会调用它。

如果你想要的话,你可以直接在主程序中调用它,如果你有一个可能因某种原因调用exit的库。

请注意,您只能注册有限数量的atexit处理程序,其中“limited”取决于您的操作系统,因此它会返回错误状态。

它为C程序提供了类似的能力,可以在C ++中调用静态变量的析构函数。

我用它来删除临时文件,或者(一次或两次)重置一些硬件寄存器。 通常没有必要使用它来关闭文件或释放内存,因为操作系统会为你做这件事。

在编写库时...想象一下在崩溃时将堆栈保存在预定义路径上(或邮件跟踪)的库。


编辑 - 正如评论中提到的,这个答案是错误的。 不读它。 太晚了。

可以在atexit()中处理异常.Assume多进程环境。 有一个物理可用的硬件资源。 任何一个进程都可以一次使用该h / w。 现在process1获取了h / w资源,并且在处理process1之后没有释放h / w资源。 为了释放h / w资源,可以使用此atexit(),以便process2可以有效地获取h / w。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM