是否需要调用CloseHandle?

jon*_*tro 4 c c++ windows winapi

我正在阅读http://support.microsoft.com/kb/243953,其中解释了如何将应用程序限制为单个实例.互斥体是在构造和创建时创建的CloseHandle.

这让我思考,CloseHandle即使应用程序将关闭,也严格要求调用?在很多freebsd c程序中,经常使用不释放malloced内存的做法,因为操作系统会在销毁后更快地清理它.即使进程已关闭,也无法调用CloseHandle占用操作系统中的资源?

Jon*_*Jon 11

即使进程已关闭,也无法调用CloseHandle占用操作系统中的资源?

不会.当一个进程终止时,操作系统会隐式释放它一直存在的任何句柄,就像它对分配的内存一样.

从系统的角度来看,不关闭句柄的缺点与不释放内存的缺点相同:只要进程仍在运行,就会阻止操作系统释放逻辑上未使用的资源.

从开发者的角度来看,缺点是没有办法将分配的资源自动分成"故意泄露"和"由于bug而泄露"的集合.在某些时候(可能不是)你意识到你的应用程序正在泄漏资源它真的不应该,这样的开放式句柄会通过帮助真正的问题隐藏在虚假的潜在客户中而使你的生活变得更加困难.