带有自定义分配器和删除器的独特ptr

时间:2018-08-09 02:58:02

标签: c++11 unique-ptr

在以下情况下,我尝试使用唯一的ptr:

MyClass *pMC = NULL;
if ( !MyCustomAlloc(void ** (&pMC), sizeof(MyClass) )
{
    return false;
}
// do things
if (something else fails)
{
    MyCustomDelete(pMC);
    return false;
}

现在,我想做的就是将其转换为唯一的ptr,这样就无需显式调用MyCustomDelete。

我没有得到的是如何保留上述结构并仍然返回适当的值。

unique_ptr<MyClass, void (*)(void**, size_t)> pMC( <b>Not Sure What Goes Here</b> , MyCustomDelete);
  • 如果我将MyCustomAlloc设置为第一个参数,那么如何检测到失败?
  • 或者,如果我执行以下操作,则pMC将被初始化为NULL,但是如何设置自定义删除器? unique_ptr<MyClass, void (*)(void**, size_t)> pMC;

    我可以做类似pMC.set(MyCustomDelter)的事情吗?

1 个答案:

答案 0 :(得分:0)

解决方案是创建一个删除类,该类将重载()运算符,然后将该类作为第二个模板参数传递。

typedef struct MyClassDeleter { void operator()(MyClass* p) { MyCustomDelete(p); } } std::unique_ptr<MyClass, MyClassDeleter> pMC;