在库等大型项目中使用 atexit
是否存在固有的危险?
如果是这样,那么 atexit
背后的技术性质可能会导致大型项目出现问题吗?
最佳答案
我避免在库中使用 atexit
的主要原因是它的任何使用都涉及全局状态。一个好的库应该避免拥有全局状态。
但是,还有其他技术原因:
atexit
处理程序。之后,对 atexit
的所有调用都可能失败,或者成功或失败取决于资源可用性。因此,如果您无法注册您的 atexit
处理程序,您必须处理该怎么做,并且可能没有任何好的方法可以继续。 atexit
与 dlopen
或其他动态加载库方法的交互未定义。已注册 atexit
处理程序的库无法安全卸载,不同的实现处理这种情况的方式可能会有所不同。 atexit
处理程序可能会相互交互,或者只是不良行为,从而阻止程序正确退出。例如,如果 atexit
处理程序尝试获取另一个线程中持有的锁,并且由于调用 exit
时的状态而无法释放该锁。 关于c - atexit 被认为是有害的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17350308/