【发布时间】:2014-10-20 23:40:31
【问题描述】:
代码如下:
class A;
shared_ptr<A> aPtr(new A());
//do something with aPtr.
如果 new 抛出 bad_alloc 异常,智能点 aPtr 发生了什么?我需要对 aPtr 做一些检查吗?该怎么做?而且我知道 Google C++ 程序规则之一是从不使用异常,但它们如何处理 bad_alloc 之类的异常?感谢您的任何回复。
【问题讨论】:
代码如下:
class A;
shared_ptr<A> aPtr(new A());
//do something with aPtr.
如果 new 抛出 bad_alloc 异常,智能点 aPtr 发生了什么?我需要对 aPtr 做一些检查吗?该怎么做?而且我知道 Google C++ 程序规则之一是从不使用异常,但它们如何处理 bad_alloc 之类的异常?感谢您的任何回复。
【问题讨论】:
如果你得到bad_alloc,无论如何你都被搞砸了。我不确定您希望如何处理此处失败的分配。在这种情况下,不使用异常实际上并不适用。
如果您真的想退出它,您可以在该语句中添加nothrow,它会返回nullptr,而不是抛出bad_alloc:
shared_ptr<A> aPtr(new (std::nothrow) A());
如需了解更多信息,请参阅this question,了解所涉及的设计注意事项。另外请参阅 this question 解释为什么使用 std::nothrow 是一个坏主意。
【讨论】: