gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:38:05 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));

类似的东西。

这可能吗?

谢谢,博达·赛多。

最佳答案

如果您使用 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/3477525/

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