【发布时间】:2011-10-13 13:43:57
【问题描述】:
就在最近,我将项目的语言从 C 切换为使用 C++。 对于 C,我使用了 malloc,然后我检查 malloc 是否成功,但对于 C++,我使用“new”来分配内存,我想知道您通常如何检查内存分配失败。
从我的谷歌搜索中,我没有看到类似以下内容。
char *buf = new (nothrow)char[10];
我还看到了以下内容。
try{} catch(bad_alloc&) {}
但是下面的呢?我正在使用一些 chrome 库例程来使用智能指针。
例如,我的代码如下。
scoped_array<char> buf(new char[MAX_BUF]);
使用智能指针很棒,但我只是不确定如何检查内存分配是否成功。 我是否需要用 nothrow 或 try/catch 分成两个单独的语句? 您通常如何在 C++ 中进行这些检查?
我们将不胜感激。
【问题讨论】:
-
你打算在失败时做什么。除了日志,您无能为力。正常的 new 会引发一个异常,该异常会启动堆栈的展开,直至您退出应用程序或进入事件循环。这两个地方都适合记录失败(因此允许您将日志记录在一个地方)。
标签: c++ memory-management smart-pointers