当前位置:首页 > c++ > 正文内容

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

xuwenyan2年前 (2021-02-19)c++160

当我们打开一个句柄使用完后,往往要求我们必须关闭,比如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
}
    文章作者:xuwenyan
    版权声明:本文为本站原创文章,转载请注明出处,非常感谢,如版权漏申明或您觉得任何有异议的地方欢迎与本站取得联系。

    扫描二维码推送至手机访问。

    版权声明:本文由艺文笔记发布,如需转载请注明出处。

    本文链接:https://www.xuwenyan.com/archives/154

    分享给朋友:

    “C++实现自动释放的句柄” 的相关文章

    C++如何实现远程注入dll

    C++如何实现远程注入dll

    如何把我们的代码放到别人的进程里面运行?我们需要做一个dll动态库,然后使用远程注入技术,将我们的dll注入到别人的进程里面,然后加载起来。这样我们的代码就可以在别人的进程里面工作了。注入代码#include "stdafx.h" int EnableD...

    C++如何获取控制台程序的输出内容?

    C++如何获取控制台程序的输出内容?

    很多工具程序(如ffmpeg)的进度显示往往都是以控制台字符显示的方法,我们可能需要调用这种控制台工具去完成工作,但同时又希望以友好的ui界面去显示当前的工作状态(如进度)。此时我们能想到的就是运行控制台程序,然后以某种方式去获取到控制台程序的输出,然后转换到我们的ui界面上去显示。 有多种...

    static_assert和assert有什么区别?

    static_assert和assert有什么区别?

    static_assert和assert都是断言,都可用于判断一个条件是否成立,并且在条件不成立时及时给出错误提示。那它们用什么不同和需要注意的地方呢? 1:static_assert在编译期执行,而assert在运行期执行。2:static_assert无论在debug模式还是relea...

    排序算法-冒泡排序

    排序算法-冒泡排序

    冒泡排序也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由冒泡排序(英语:Bubble Sort)又称为泡式排序,是一种简单的排序算法。它重复地走访过...

    排序算法-选择排序

    排序算法-选择排序

    选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。时间复杂度O(n²)最坏情况合适发生?数组顺序与需要的顺序正好相反。步骤首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再...

    大端模式和小端模式的区别以及如何判断大小端

    大端模式和小端模式的区别以及如何判断大小端

    在计算中,字节顺序是指数字的二进制表示内的字节(或有时是位)的顺序。它也可以更普遍地用于指代任何表示的内部排序,例如数字系统中的数字或日期的部分。在最常见的用法中,字节顺序表示多字节数字内的字节顺序,而大小端字节的排列顺序是相反的。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多...