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