我想知道是否有办法使用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.
原文地址:https://www.jb51.cc/windows/371888.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。