我努力寻找避免多个返回语句的方法,从而不会重复清理资源,这使我找到了以下方法:
这两种方法都允许在一个地方清理资源(紧接返回语句的上方),并提高可读性。还有其他方法可以避免多次返回吗?
发布于 2017-02-17 05:13:31
您不需要求助于goto来清理C++中的事务。在自动作用域中构造的所有对象都将被销毁。他们必须负责清理。
也就是说,您可以使用宏简化错误检查代码的编写。
#define CHECK_ERROR(x) if (OK != x) return x;
ErrorCode func ()
{
ErrorCode err = OK;
err = fn1();
CHECK_ERROR(err);
err = fn2();
CHECK_ERROR(err);
return err;
}更新,回应OP的评论
使用助手类调用CloseHandle。
struct HandlerMinder
{
HandleMinder(ErrorCode& err, HANDLE hObject) :
err_(err), hObject_(hObject) {}
~HandleMinder()
{
// Adapt the logic to suit your needs.
if ( err_ != OK )
{
CloseHandle(hObject_);
}
}
ErrorCode& err_;
HANDLE hObject_;
};
ErrorCode func ()
{
ErrorCode err = OK;
HANDLE object = <some handle>;
HandleMinder m(err, object);
err = fn1();
CHECK_ERROR(err);
err = fn2();
CHECK_ERROR(err);
return err;
}https://stackoverflow.com/questions/42289800
复制相似问题