我正在尝试在以下情况下使用唯一的 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;