【发布时间】:2011-03-29 11:56:25
【问题描述】:
我的一些代码仍然使用malloc 而不是new。原因是我害怕使用new,因为它会抛出异常,而不是返回NULL,我可以轻松检查。将每个对new 的调用都封装在try{}catch(){} 中看起来也不是那么好。而当使用malloc 时,我可以使用if (!new_mem) { /* handle error */ }。
因此我有一个问题。我可以将智能指针与malloc 一起使用吗?
类似:
SmartPointer<Type> smarty = malloc(sizeof(Type));
类似的东西。
这可能吗?
谢谢,博达·赛多。
【问题讨论】:
-
如果你想让 new 现在抛出一个异常并且只返回 NULL,你可以使用:Type* bla = new (std::nothrow) Type();。我认为使用 std::nothrow 比使用 malloc 更好,因为后者不调用构造函数。
-
你打算在错误处理代码中做什么来补偿没有获得内存?通常测试是如果分配工作那么做工作。如果失败并返回错误代码退出(这是一种将控制权传回堆栈的复杂方式)。
标签: c++ malloc new-operator smart-pointers