每当我们使用set_new_handler(std :: new_handler handle_mem_alloc)处理内存分配失败时,如果发生任何内存分配失败,则会调用handle_mem_alloc()。如果我们没有从此函数中抛出任何异常,则new运算符不会抛出任何错误。
我的问题是,当存在内存分配失败并且我们没有从handle_mem_alloc()函数抛出任何异常时,是否会在此场景中调用构造函数?
答案 0 :(得分:4)
从this reference开始,新处理程序必须执行以下操作之一:
- 提供更多可用内存
- 终止程序(例如通过调用std :: terminate)
- 抛出std :: bad_alloc类型的异常或从std :: bad_alloc派生。
醇>
如果新处理程序返回,则再次尝试分配,如果仍然失败,则再次调用新处理程序(未缓存,可能由新处理程序更改),依此类推。
所以你的问题的答案是否定的,在内存分配实际成功之前,永远不会调用构造函数。