具有自定义分配器和删除器的唯一 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)的事情吗?

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

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

最新更新