【问题标题】:How to deal with bad_alloc in RAII?如何处理 RAII 中的 bad_alloc?
【发布时间】: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 之类的异常?感谢您的任何回复。

【问题讨论】:

    标签: raii bad-alloc


    【解决方案1】:

    如果你得到bad_alloc,无论如何你都被搞砸了。我不确定您希望如何处理此处失败的分配。在这种情况下,不使用异常实际上并不适用。

    如果您真的想退出它,您可以在该语句中添加nothrow,它会返回nullptr,而不是抛出bad_alloc

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

    如需了解更多信息,请参阅this question,了解所涉及的设计注意事项。另外请参阅 this question 解释为什么使用 std::nothrow 是一个坏主意。

    【讨论】:

    • 非常感谢。真的很有帮助。
    猜你喜欢
    • 2012-03-16
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    相关资源
    最近更新 更多