我想知道是否有办法使用unique_ptr<T>Windows HANDLEs?
我正在考虑std::default_delete用特定的handle_trats呼叫替换CloseHandle.问题是HANDLE定义为void* unique_ptr<void>无法编译,因为sizeof(void)未定义.
到目前为止,我只看到两种可能性:
unique_ptr<new CHandle(h)>.这几乎使unique_ptr<T>自己无用.HANDLE类似的特定智能指针类unique_ptr<T>.您认为更好的选择是什么?你会建议什么?
这个问题可以扩展为COM IUnknown指针 - 可以CComPtr用任何标准智能指针代替吗?
可以扩展COM IUnknown指针的问题 - CComPtr可以被任何标准智能指针替换吗?
是.您不专门std::default_deleter,只需替换删除器类型.
struct COMDeleter {
template<typename T> void operator()(T* ptr) {
ptr->Release();
}
};
unique_ptr<IUnknown, COMDeleter> ptr; // Works fine
Run Code Online (Sandbox Code Playgroud)
同样的原则同样适用shared_ptr于HANDLE.
创建一个特定的智能指针类,不会花费很长时间.不要滥用图书馆类.句柄语义与C++指针的语义完全不同; 首先,取消引用一个手柄是没有意义的.
使用自定义智能句柄类的另一个原因 - NULL并不总是意味着一个空句柄.有时它是INVALID_HANDLE_VALUE,它不相同(实际上是-1).
| 归档时间: |
|
| 查看次数: |
5070 次 |
| 最近记录: |