gpt4 book ai didi

c++ - 是否可以将 C++ 智能指针与 C 的 malloc 一起使用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:22 24 4
gpt4 key购买 nike

我的一些代码仍然使用 malloc 而不是 new。原因是因为我害怕使用 new 因为它会抛出异常,而不是返回 NULL,我可以很容易地检查它。将对 new 的每次调用包装在 try{}catch(){} 中看起来也不太好。而当使用 malloc 时,我可以执行 if (!new_mem) {/* handle error */}

所以我有一个问题。我可以将智能指针与 malloc 一起使用吗?

类似于:

SmartPointer<Type> smarty = malloc(sizeof(Type));

像这样。

这可能吗?

谢谢,Boda Cydo。

最佳答案

如果您正在使用 shared_ptrunique_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++ - 是否可以将 C++ 智能指针与 C 的 malloc 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44679361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com