对于内存分配失败,构造函数在set_new_handler(std :: new_handler func)失败后调用?

时间:2013-10-02 10:36:39

标签: c++ out-of-memory

每当我们使用set_new_handler(std :: new_handler handle_mem_alloc)处理内存分配失败时,如果发生任何内存分配失败,则会调用handle_mem_alloc()。如果我们没有从此函数中抛出任何异常,则new运算符不会抛出任何错误。

我的问题是,当存在内存分配失败并且我们没有从handle_mem_alloc()函数抛出任何异常时,是否会在此场景中调用构造函数?

1 个答案:

答案 0 :(得分:4)

this reference开始,新处理程序必须执行以下操作之一:

  
      
  1. 提供更多可用内存
  2.   
  3. 终止程序(例如通过调用std :: terminate)
  4.   
  5. 抛出std :: bad_alloc类型的异常或从std :: bad_alloc派生。
  6.   

如果新处理程序返回,则再次尝试分配,如果仍然失败,则再次调用新处理程序(未缓存,可能由新处理程序更改),依此类推。

所以你的问题的答案是否定的,在内存分配实际成功之前,永远不会调用构造函数。