是否可以将C智能指针与C的malloc一起使用?
作者:互联网
我的一些代码仍然使用malloc而不是new.原因是因为我害怕使用new,因为它抛出异常,而不是返回NULL,我可以轻松检查.在try {} catch(){}中包含对new的每个调用也看起来不那么好.而当使用malloc我可以做if(!new_mem){/ *句柄错误* /}.
所以我有一个问题.我可以和malloc一起使用智能指针吗?
就像是:
SmartPointer<Type> smarty = malloc(sizeof(Type));
像这样的东西.
这可能吗?
谢谢,Boda Cydo.
解决方法:
如果您使用的是shared_ptr或unique_ptr,则可以指定自定义删除器.例如,
struct free_delete
{
void operator()(void* x) { free(x); }
};
这可以与shared_ptr一起使用,如下所示:
std::shared_ptr<int> sp((int*)malloc(sizeof(int)), free_delete());
如果使用unique_ptr,则删除操作是unique_ptr类型的一部分,因此需要将删除操作指定为模板参数:
std::unique_ptr<int, free_delete> up((int*)malloc(sizeof(int)));
但是,在编写C时,最好正确使用异常,而不是避免使用异常,尤其是在分配失败方面.在大多数情况下,您无法从尝试执行分配的函数中的分配失败中成功恢复,因此异常可以帮助您处理实际能够处理它的错误.
标签:c,malloc,smart-pointers,new-operator 来源: https://codeday.me/bug/20190926/1818508.html