- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
new-handler 函数是分配函数在内存分配尝试失败时调用的函数。它的预期目的是三件事之一:
下面的重载能保证什么吗?
void * operator new(std::size_t size) throw(std::bad_alloc){
while(true) {
void* pMem = malloc(size);
if(pMem)
return pMem;
std::new_handler Handler = std::set_new_handler(0);
std::set_new_handler(Handler);
if(Handler)
(*Handler)();
else
throw bad_alloc();
}
}
最佳答案
std::set_new_handler
不会使内存可用,它会设置一个新的处理程序函数以在分配失败时使用。
用户定义的新处理程序函数可能能够提供更多内存,例如通过清除内存中的缓存,或销毁一些不再需要的对象。默认的 new-handler 不不这样做,它是一个空指针,所以分配内存失败只会抛出一个异常,因为标准库无法知道程序中的哪些对象可能不再需要了。如果您编写自己的新处理程序,您可能能够根据您对程序及其要求的了解将一些内存返回给系统。
关于c++ - std::set_new_handler 如何提供更多可用内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945537/
对于类特定的 new_handler 实现,我在“effective c++”一书中遇到了以下示例。这在多线程环境中看起来有问题,我的问题是如何在多线程环境中实现类特定的 new_handler? v
来自 std::set_new_handler new-handler 函数是分配函数在内存分配尝试失败时调用的函数。它的预期目的是三件事之一: 提供更多可用内存 终止程序(例如通过调用 std::t
如果您使用 set_new_handler 并且您的处理程序函数被调用,errno 是否保证被设置,它是从 malloc : 3 The value of errno in the initial t
有人问set_new_handler 在多线程环境下是否安全。我想知道 C++11 和更高版本的 C++ 标准库实现是否使用 thread_local 功能来存储 std::new_handler。如
在 C++ 中,你 can安排一个函数在 new 失败时调用。有没有办法在 malloc 失败时调用一个函数?假设正在从我不想更改的第三方库调用 malloc。 我认为没有可移植的答案,所以我很乐意接
是否需要担心将 set_new_handler 与智能或自动指针结合使用,或者库中包含具有改进错误处理的处理程序? 谢谢 最佳答案 C++自带的智能指针(目前只有auto_ptr,但很快包括share
每当我们使用 set_new_handler (std::new_handler handle_mem_alloc) 来处理内存分配失败时,如果发生任何内存分配失败,那么 handle_mem_all
所以前几天我去编译我正在处理的 VC++ 项目,突然间我几乎所有的文件都出现错误: new.h: error C2039: 'set_new_handler' : is not a member of
我是一名优秀的程序员,十分优秀!