如何在RAII中处理bad_alloc?

时间:2014-08-27 11:43:02

标签: raii bad-alloc

代码如下:

class A;
shared_ptr<A> aPtr(new A());
//do something with aPtr.

如果new抛出bad_alloc异常,智能点aPtr会发生什么?我需要用aPtr做一些检查,怎么办?我知道其中一个Google C ++程序规则永远不会使用异常,但它们如何处理bad_alloc等异常?谢谢你的回复。

1 个答案:

答案 0 :(得分:0)

如果你得到一个bad_alloc,你几乎已经搞砸了。我不确定你希望如何在这里处理失败的分配。在这种情况下,不使用异常并不适用。

如果确实想要选择退出,您可以在该语句中添加nothrow,它将返回nullptr而不是抛出bad_alloc

shared_ptr<A> aPtr(new (std::nothrow) A());

有关详细信息,请参阅this question有关所涉及的设计考虑因素。另请参阅this question explainign为什么使用std::nothrow是一个坏主意。