如果我有一个函数,我在我的应用程序出错时调用,并在该函数中调用ExitProcess
退出。我是否需要找到一种方法让它调用WSACleanup()
和ReleaseMutex
以及RemoveFontMemResourceEx
等内容,并释放其他手动分配的变量?
我相信系统会在我的应用程序退出时自动执行此操作,但是有什么理由我还想调用这些清理功能吗? 如果我不这样做,我是否需要在我的申请退出之前立即打电话给他们?
答案 0 :(得分:4)
标题是“C ++错误清理问题”,上面有一个[c ++]标签,所以... 为什么不是你的资源(内存,网络连接,互斥,关键部分等)。 )由RAII处理?
如果你有错误,那么抛出一个异常,如果你可以处理它就在堆栈上把它处理得更高,如果你不能,就让它崩溃应用程序(或者在主程序中捕获它,然后优雅地退出主程序)带有错误代码)。
在堆栈展开后,所有受RAII保护的资源都将被清除(因此您不会有任何资源泄漏)。
解决方案的优点是:
答案 1 :(得分:3)
大多数(所有?)现代操作系统在进程退出时释放大部分资源,因此大多数情况下退出是安全的。但有理由明确释放它们。
首先,如果您使用资源泄漏检测工具(例如valgrind用于内存泄漏),它会给您误报。
其次,如果您的代码将来会被重构,您可能会忘记一些资源并导致泄漏。
所以我认为在你完成资源后尽快发布资源总是一个好主意。
答案 2 :(得分:1)
atexit
功能可能很有用 - http://www.cplusplus.com/reference/clibrary/cstdlib/atexit/