bod*_*ydo 23 c++ malloc smart-pointers new-operator
我的一些代码仍然使用malloc而不是new.原因是因为我害怕使用,new因为它抛出异常,而不是返回NULL,我可以很容易地检查.结束语每次调用new的try{}catch(){}也看起来并不好.而在使用时malloc我可以做到if (!new_mem) { /* handle error */ }.
所以我有一个问题.我可以同时使用智能指针malloc吗?
就像是:
SmartPointer<Type> smarty = malloc(sizeof(Type));
Run Code Online (Sandbox Code Playgroud)
像这样的东西.
这可能吗?
谢谢,Boda Cydo.
Jam*_*lis 39
如果您正在使用shared_ptr或unique_ptr,则可以指定自定义删除器.例如,
struct free_delete
{
void operator()(void* x) { free(x); }
};
Run Code Online (Sandbox Code Playgroud)
这可以shared_ptr像这样使用:
std::shared_ptr<int> sp((int*)malloc(sizeof(int)), free_delete());
Run Code Online (Sandbox Code Playgroud)
如果您正在使用unique_ptr,则删除器是该unique_ptr类型的一部分,因此需要将删除器指定为模板参数:
std::unique_ptr<int, free_delete> up((int*)malloc(sizeof(int)));
Run Code Online (Sandbox Code Playgroud)
但是,在编写C++时,最好正确使用异常,而不是避免使用异常,尤其是在分配失败方面.在大多数情况下,您无法从尝试执行分配的函数中的分配失败中成功恢复,因此异常可以帮助您处理实际能够处理它的错误.
您可以对new运算符使用nothrow关键字,它将返回NULL而不是抛出异常.有关详细信息,请参阅以下链接:http: //www.cplusplus.com/reference/std/new/nothrow/
| 归档时间: |
|
| 查看次数: |
11994 次 |
| 最近记录: |