代码如下:
class A;
shared_ptr<A> aPtr(new A());
//do something with aPtr.
如果new抛出bad_alloc异常,智能点aPtr会发生什么?我需要用aPtr做一些检查,怎么办?我知道其中一个Google C ++程序规则永远不会使用异常,但它们如何处理bad_alloc等异常?谢谢你的回复。
答案 0 :(得分:0)
如果你得到一个bad_alloc
,你几乎已经搞砸了。我不确定你希望如何在这里处理失败的分配。在这种情况下,不使用异常并不适用。
如果确实想要选择退出,您可以在该语句中添加nothrow
,它将返回nullptr
而不是抛出bad_alloc
:
shared_ptr<A> aPtr(new (std::nothrow) A());
有关详细信息,请参阅this question有关所涉及的设计考虑因素。另请参阅this question explainign为什么使用std::nothrow
是一个坏主意。