【问题标题】:catch only memory issues C++仅捕获内存问题 C++
【发布时间】:2020-12-03 15:11:31
【问题描述】:

我可以捕捉到什么异常类型来检测内存问题?

我想检测 new 何时失败,或 c'tor 的类失败。

catch (Exception &e) 过于宽泛,不仅能捕捉内存问题。

注意:我记得有这种类型但是忘记了,它以std::开头

【问题讨论】:

  • 当构造函数失败时,由类来决定它抛出什么。没有通用的“构造函数失败”异常。
  • new 失败因为它无法分配内存它会抛出std::bad_alloc。它可能由于其他原因而失败,并且没有标准的异常类型。
  • 没有基本的Exception 类型。你可能会想到std::exception。这是任何标准异常类型的基础,也可能是第三方异常的基础,但不能保证捕获所有异常。
  • @drescherjm 所以要捕获 ALLOCATION_ERROR 我需要捕获所有内容
  • 您添加的代码完全改变了问题。它提出了很多很多关于它打算做什么以及你想要实现什么的问题。

标签: c++ class exception memory


【解决方案1】:

内存不足抛出std::bad_alloc如果操作系统选择将问题报告给应用程序。

构造函数可以做的不仅仅是分配内存,他们可以随心所欲地抛出任何东西。

Here 是所有标准异常类的概述。

【讨论】:

    【解决方案2】:

    如果new 在调用对象的构造函数之前由于自身无法为新对象分配内存而失败,则会抛出std::bad_alloc 异常。

    如果对象的内存分配成功,然后构造函数出于任何原因抛出自己的异常,new 将取消构造,释放它能够分配的内存,并重新抛出构造函数抛出的任何异常.

    除非您使用newnothrow 版本,在这种情况下,它会默默地丢弃任何抛出的异常并返回nullptr

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2011-07-04
      • 1970-01-01
      相关资源
      最近更新 更多