其他分享
首页 > 其他分享> > 是否可以将C智能指针与C的malloc一起使用?

是否可以将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