当我们打开一个句柄使用完后,往往要求我们必须关闭,比如HANDLE,不再使用时需要CloseHandle()去关闭,非常麻烦,特别当函数有多个return时非常难写,这时我们就需要一个可以自动释放的句柄,这就好比智能指针,只需要创建使用而不需要管释放问题。
class AutoHandle {
public:
AutoHandle():handle_(INVALID_HANDLE_VALUE) {
};
AutoHandle(HANDLE handle) : handle_(handle) {
};
~AutoHandle() {
if (handle_ != INVALID_HANDLE_VALUE) {
::CloseHandle(handle_);
}
};
HANDLE operator=(HANDLE handle) {
handle_ = handle;
return handle_;
}
operator HANDLE&() {
return handle_;
}
operator HANDLE*() {
return &handle_;
};
private:
HANDLE handle_;
};
void Function() {
AutoHandle handle_ = ::CreateFile(...);
if(handle_ != INVALID_HANDLE_VALUE) {
// todo
}
// 这里就不需要再管句柄的释放问题了,AutoHandle析构时会自动释放HANDLE
}