从这个回答:When is a C++ terminate handler the Right Thing(TM)?
当应用程序退出时,操作系统会自动清除“是”和“不”的资源列表会很不错。在您的回答中,如果您可以指定操作系统/资源并且最好是指向某个文档(如果适用)的链接,那将是很好的。
显而易见的一个:
内存:是自动清理。 题。有没有例外?
答案 0 :(得分:5)
当应用程序在没有明确释放的情况下崩溃或退出时,Windows无法清理一些模糊的资源,主要是因为操作系统不知道它们是否重要而不会离开。
WNDCLASS
es(“当卸载DLL时,DLL注册的窗口类没有注册。一个DLL在卸载时必须显式取消注册它。”MSDN)如果你的全局window类也有DC类,那么DC也会泄漏。ATOM
(资源相对有限)。RegisterWindowMessage
创建的窗口消息ID。这些是为了泄漏而设计的,因为没有UnregisterWindowMessage
。答案 1 :(得分:3)
任何异常都是一个错误 - 应用程序可以并且确实崩溃并且确实包含泄漏。操作系统需要可靠,即使面对写得不好的应用程序也不会耗尽资源。这也适用于非OS资源。将资源分发给流程的服务需要在流程退出时释放这些资源。如果不是,那就是需要修复的错误。
如果你正在寻找可以在进程退出之后持续存在的程序工件,那么在Windows上你至少有:
答案 2 :(得分:3)
在Windows中,几乎任何可以处理的事情都应该由操作系统管理 - 这就是为什么你只能得到一个句柄。这包括但不限于汤姆 以下(从MSDN文档复制的CloseHandle()API列表):
Communications device
Console input
Console screen buffer
Event
File
File mapping
Job
Mailslot
Mutex
Named pipe
Process
Semaphore
Socket
Thread
Token
当应用程序关闭时,操作系统应该恢复所有这些,但可能不会立即恢复,具体取决于其他进程的使用情况。
其他操作系统以相同的方式工作。很难想象一个名副其实的操作系统(我不包括嵌入式系统等),但事实并非如此 - 资源管理是操作系统的第一个存在理由。
答案 3 :(得分:3)
临时文件是不被清除的一个很好的例子 - 句柄被释放但文件没有被删除