C++实现自动释放的句柄

当我们打开一个句柄使用完后,往往要求我们必须关闭,比如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
}

本文为@艺文笔记原创文章,转载请注明出处:https://www.xuwenyan.com/archives/154,非常感谢!
上一篇:  下一篇: