首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用atexit函数的场景是什么?

使用atexit函数的场景是什么?
EN

Stack Overflow用户
提问于 2014-08-04 17:33:17
回答 5查看 1.7K关注 0票数 5

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

EN

回答 5

Stack Overflow用户

发布于 2014-08-04 17:37:39

我猜它的主要用途是当你不能控制main的时候,你想确保在它的末尾调用了一些东西。

它有时被库使用,这些库不想坚持让用户程序在终止程序之前显式地调用它们的清理函数。

它也用在phoenix单例模式中(参见Andrei Alexandrescu的现代C++设计)。

票数 5
EN

Stack Overflow用户

发布于 2014-08-04 17:44:24

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

一些用例:

  • 清理临时文件夹
  • 打印内存转储
票数 5
EN

Stack Overflow用户

发布于 2014-08-04 19:44:40

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

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

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

它赋予C程序类似于在C++中调用静态变量的析构函数的能力。

我用它来删除临时文件,或者(一两次)重置一些硬件寄存器。通常不需要使用它来关闭文件或租用内存,因为操作系统将为您完成这些操作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25115612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档