如果新操作员工作,应该总是检查吗?

Fab*_*ian 13 c++ new-operator

我有两个关于new运算符的问题:

  1. 新操作员是否无法分配内存?

  2. 如果确实有一个对象被创建,那么每次使用new后都应该进行一次测试吗?

15e*_*153 21

operator new会在失败时抛出std :: bad_alloc异常,除非您明确使用该nothrow版本.因此,不要检查返回值:如果在构造函数调用后到达下一行,则可以安全地假设构造函数成功.

但是将代码的适当范围的分支包装在try-catch块中:通常不是直接围绕新调用,而是在可以调用依赖于分配的所有内容的行的某个地方,而不是其他内容.

更新:但请参阅Jonathan Leffler在下面的评论中关于new的nothrow变体.


Jon*_*ler 13

  1. 是的,new可能无法分配内存,但默认情况下它会在失败时抛出异常.
  2. 如果使用no-throw变体,则只需要检查结果new.