文件名称:资源清理-rfc4862(中文) ipv6无状态地址自动配置
文件大小:1.28MB
文件格式:PDF
更新时间:2024-06-22 11:26:45
编程 标准 规范 命名规则 C++
3.17 资源清理 动态分配的内存或资源,在您退出函数之前应该被正确的清理,以防止内存或资源泄露。在函数执行过 程中出现错误时,恰当的资源清理方案是非常重要的。以下是在函数中,5 种常见的资源清理模式。 Pattern Example Analysis goto 清理法 HANDLE hToken = NULL; PVOID pMem = NULL; if (!OpenProcessToken(GetCurrentProcess (), TOKEN_QUERY, &hToken)) { ReportError(GetLastError()); goto Cleanup; } pMem = LocalAlloc(LPTR, 10); if (pMem == NULL) { ReportError(GetLastError()); goto Cleanup; } ... Cleanup: if (hToken) { CloseHandle(hToken); hToken = NULL; } if (pMem) { LocalFree(pMem); pMem = NULL; } 如果您确保代码绝不抛出异常, "goto 清理法"是最佳选择。 效率比 "__try/__finally 法"高,实现比"带 RAII 封装器的提前返回法"简单。 可以移植至 C。 __try / __finally 法 HANDLE hToken = NULL; PVOID pMem = NULL; __try { __try/__finally 法 不可移植至其他 系统,会 使优化器无法运行,比 goto 和提前返回法的效率低下很