我正在开发一个 C++ 应用程序,它使用另一个团队用 C 语言编写的库。库的编写者喜欢exit()
在发生错误时调用,这会立即结束程序,而无需调用 C++ 应用程序中堆栈上的对象的析构函数。应用程序设置了一些在进程结束后不会被操作系统自动回收的系统资源(共享内存区域、进程间互斥体等),所以这是一个问题。
我有完整的应用程序和库的源代码,但是库非常完善并且没有单元测试,所以改变它会很重要。有没有办法“挂钩”调用,exit()
以便我可以为我的应用程序实现正常关闭?
我正在考虑的一种可能性是创建一个大类,即应用程序——这意味着所有清理都将发生在其析构函数或其中一个成员的析构函数中——然后在堆中分配这些大对象之一main()
,设置一个全局指向它的指针,并使用atexit()
来注册一个处理程序,该处理程序只是通过全局指针删除对象。这可能行得通吗?
有没有已知的好方法来解决这个问题?