【发布时间】:2019-01-16 09:32:26
【问题描述】:
我正在尝试在以下场景中使用唯一的 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)的事情吗?
【问题讨论】:
-
MyCustomAlloc(void ** (&pMC), sizeof(MyClass)导致标准 C++ 中的未定义行为(您不能将其他指针别名为void *)。最好将函数设为template<typename T> T *MyCustomAlloc();或类似 -
你试过here的建议了吗?
-
谢谢。试一试。将报告进展情况。
标签: c++11 unique-ptr