Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何实现,坏的alloc将中止而不是抛出异常_C++_Exception_Bad Alloc - Fatal编程技术网

C++ 如何实现,坏的alloc将中止而不是抛出异常

C++ 如何实现,坏的alloc将中止而不是抛出异常,c++,exception,bad-alloc,C++,Exception,Bad Alloc,在我们的应用程序中,我们将所有崩溃记录到包含堆栈跟踪的日志文件中。我们可以使用这些报告来确定崩溃原因 问题是,我们倾向于在几个地方(实际上很多地方)捕获std::exception,这使得报告在抛出bad_alloc时实际上是无用的,因为堆栈跟踪丢失了 如何更改行为,从而使程序中止,而不是抛出坏的\u alloc?当我们在3个不同的操作系统中编写时,使用了3种不同的std实现,我们希望避免更改std本身。除了重新思考或重新设计以捕获更多定制的异常(我真的建议)之外,您有两种解决方案: 使用的“禁

在我们的应用程序中,我们将所有崩溃记录到包含堆栈跟踪的日志文件中。我们可以使用这些报告来确定崩溃原因

问题是,我们倾向于在几个地方(实际上很多地方)捕获std::exception,这使得报告在抛出bad_alloc时实际上是无用的,因为堆栈跟踪丢失了


如何更改行为,从而使程序中止,而不是抛出坏的\u alloc?当我们在3个不同的操作系统中编写时,使用了3种不同的std实现,我们希望避免更改std本身。

除了重新思考或重新设计以捕获更多定制的异常(我真的建议)之外,您有两种解决方案:

  • 使用的“禁止投掷”变体。检查返回的空指针,然后中止

  • 这就叫


  • 我检查了异常层次结构(),似乎我们永远不需要捕获std::runtime\u异常之外的任何内容,我们所有的内部异常类型都是从std::runtime\u异常派生的

    所以我只是改变了我们程序中最广泛的捕获是std::runtime\u error,所以std::bad\u alloc变成了异常,我们可以正确地管理它


    编辑:这只能在C++11之后使用,也许您应该重新考虑捕获
    std::exception
    的设计,而不是捕获更具体的异常?捕捉
    std::exception
    几乎和捕捉
    一样糟糕。…
    IMO.可能的dup