在以下情况下,我尝试使用唯一的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);
或者,如果我执行以下操作,则pMC将被初始化为NULL,但是如何设置自定义删除器?
unique_ptr<MyClass, void (*)(void**, size_t)> pMC;
我可以做类似pMC.set(MyCustomDelter)
的事情吗?
答案 0 :(得分:0)
解决方案是创建一个删除类,该类将重载()运算符,然后将该类作为第二个模板参数传递。
typedef struct MyClassDeleter
{
void operator()(MyClass* p)
{
MyCustomDelete(p);
}
}
std::unique_ptr<MyClass, MyClassDeleter> pMC;