我很清楚std::unique_ptr
C++11 中的 RAII 模式和其他“智能指针”,但仍有一些情况我无法弄清楚如何在没有goto Cleanup
最终进行清理的部分的情况下很好地处理。
具体来说,我正在考虑 Windows 编程,有时我会想要泄漏句柄,而其他时候我不会。
如果我有一个看起来有点像他的函数:
PROCESS_INFORMATION p;
if (!CreateProcess(... &p))
{
throw windows_error(GetLastError());
}
DWORD r = WaitForSingleObject(h, 5000);
if (r == WAIT_TIMEOUT || r == WAIT_FAILED)
{
// terminate process, close handles
throw ...;
}
if (!SetEnvironmentVariable(...))
{
// terminate process, close handles
throw windows_error;
}
(a few other operations that if they fail i have cleanup to do).
return process handle;
我真的不知道如何unique_ptr
在这里帮助我,除非我毕竟使用 therelease()
来表示成功/告诉不要清理它。(我可以创建一个特殊的删除器,以便它正确清理 Windows 句柄)。但是,我的问题是,对于我想将分配的内存/句柄泄漏回调用者的情况,智能指针的这种用法是“正确的”吗?有更好的方法吗?退回罐头也可以,我想...unique_ptr
if
unique_ptr
unique_ptr
release()
shared_ptr