c++11 - 具有自定义分配器和删除器的唯一 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;
推荐阅读
- java - Java:从多数组中提取索引 src
- python-3.x - Cloudfare 中间件递归绕过保护
- jaxb - 如何将无数据节点呈现为
? - ios - 为 App Store 准备不同分辨率的 App 预览视频
- sql-server - 在另一个驱动器上还原后数据库大小增加
- android - SupportMapFragment 正在隐藏 admob 横幅
- android - Android - 即使设备处于打盹模式,音乐应用程序如何继续在网络上流式传输?
- javascript - 遇到两个孩子用同一个钥匙。密钥应该是唯一的,以便组件在更新时保持其身份
- python - Python:如何找到一个非常大的数的质因数?
- python - 如何在python Django项目中全局设置常量