gpt4 book ai didi

c++ - set_new_handler (std::new_handler func) 失败后构造函数调用,内存分配失败?

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:37 24 4
gpt4 key购买 nike

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

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

最佳答案

来自 this reference ,新的处理程序必须执行以下操作之一:

  1. make more memory available
  2. terminate the program (e.g. by calling std::terminate)
  3. throw exception of type std::bad_alloc or derived from std::bad_alloc.

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

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

关于c++ - set_new_handler (std::new_handler func) 失败后构造函数调用,内存分配失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19134999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com