加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何在Windows HANDLEs中使用C标准智能指针?

发布时间:2020-12-13 20:35:04 所属栏目:Windows 来源:网络整理
导读:我想知道是否有办法使用unique_ptr T用Windows HANDLEs? 我正在考虑用调用CloseHandle的特定handle_trats替换std :: default_delete.问题是HANDLE被定义为void * unique_ptr void因为未定义sizeof(void),所以不会编译. 到目前为止,我只看到两种可能性: 为H
我想知道是否有办法使用unique_ptr< T>用Windows HANDLEs?

我正在考虑用调用CloseHandle的特定handle_trats替换std :: default_delete.问题是HANDLE被定义为void * unique_ptr< void>因为未定义sizeof(void),所以不会编译.

到目前为止,我只看到两种可能性:

>为HANDLE创建一个包装类,并像这样使用它:unique_ptr< new CHandle(h)>.这几乎使unique_ptr< T>本身没用.
>使用类似于unique_ptr< T>的HANDLE特定智能指针类.

您认为更好的选择是什么?你会建议什么?

问题可以扩展为COM IUnknown指针 – CComPtr可以被任何标准智能指针替换吗?

The question can be extended for COM IUnknown pointers – can CComPtr
be replaced by any of the standard smart pointers?

是.您没有专门化std :: default_deleter,只需替换删除器类型即可.

struct COMDeleter {
    template<typename T> void operator()(T* ptr) {
        ptr->Release();
    }
};
unique_ptr<IUnknown,COMDeleter> ptr; // Works fine

同样的原则适用于shared_ptr,实际上也适用于HANDLE.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读