相关疑难解决方法(0)

std :: unique_ptr,deleters和Win32 API

在VC2012中,我想使用唯一指针和删除器在构造函数中创建一个互斥锁,这样我就不需要创建一个析构函数来调用CloseHandle.

我原以为这会起作用:

struct foo
{
    std::unique_ptr<HANDLE, BOOL(*)(HANDLE)> m_mutex;
    foo() : m_mutex(CreateMutex(NULL, FALSE, NULL), CloseHandle) {}
}
Run Code Online (Sandbox Code Playgroud)

但在编译时我收到一个错误:

error C2664: 'std::unique_ptr<_Ty,_Dx>::unique_ptr(void *,int 
(__cdecl *const &)(HANDLE)) throw()' : cannot convert parameter 1 from 
'HANDLE' to 'void *'
Run Code Online (Sandbox Code Playgroud)

当我修改构造函数时:

foo() : m_mutex((void*)CreateMutex(NULL, FALSE, 
    (name + " buffer mutex").c_str()), CloseHandle) {}
Run Code Online (Sandbox Code Playgroud)

我变得更加不寻常:

error C2664: 'std::unique_ptr<_Ty,_Dx>::unique_ptr(void *,
int (__cdecl *const &)(HANDLE)) throw()' : cannot convert 
parameter 1 from 'void *' to 'void *'
Run Code Online (Sandbox Code Playgroud)

我现在不知所措.HANDLE是void*的typedef:我需要了解一些转换魔法吗?

c++ winapi unique-ptr c++11

26
推荐指数
2
解决办法
6350
查看次数

标签 统计

c++ ×1

c++11 ×1

unique-ptr ×1

winapi ×1