在 C++11 中是否可以用来shared_ptr
控制非指针资源?
可以unique_ptr
用来管理非指针资源。这是通过实现一个自定义删除器类来完成的,该类提供:
- A
typedef {TYPE} pointer;
where{TYPE}
是非指针资源类型 operator()(pointer)
释放受控资源
...然后unique_ptr
使用自定义删除器实例化 a 作为第二个模板参数。
例如,在 Windows 下,可以创建一个unique_ptr
管理服务控制句柄。这种句柄类型不是通过调用释放的delete
,而是通过调用释放的CloseServiceHandle()
。这是执行此操作的示例代码:
自定义删除器
struct SvcHandleDeleter
{
typedef SC_HANDLE pointer;
SvcHandleDeleter() {};
template<class Other> SvcHandleDeleter(const Other&) {};
void operator()(pointer h) const
{
CloseServiceHandle(h);
}
};
typedef std::unique_ptr<SC_HANDLE,SvcHandleDeleter> unique_sch;
实例化
unique_sch scm(::OpenSCManagerA(0, 0, SC_MANAGER_ALL_ACCESS));
是否也可以用来shared_ptr
控制非指针资源?
根据文档,shared_ptr
构造函数重载提供了提供自定义删除器类的方法,但是没有一个构造函数接受既不是指针也不是指针包装器的资源类型。
如何才能做到这一点?