ven*_*rty 5 c++ exception-handling
void newHandler() {
cdebug << "memory allocation failure" << std::endl;
throw std::bad_alloc();
}
int main() {
std::set_new_handler(newHandler);
// ...
}
Run Code Online (Sandbox Code Playgroud)
一旦newHandler被建立为我们的错误处理程序,它将在任何堆分配失败时被调用.关于错误处理程序的有趣之处在于它会被连续调用,直到内存分配成功,或者函数抛出错误.
我对上面文本的问题是,"直到内存分配成功,或者函数抛出错误"时,authore的意思是什么.在这种情况下,函数如何抛出错误?要求举例说明.
谢谢你的时间和帮助.
基本上,您的处理程序可能有3个行为
参考:http://www.cplusplus.com/reference/new/set_new_handler/
如果您不想在每次新调用时处理分配错误,这将非常有用.根据您的系统(使用大量内存),您可以释放一些已分配的内存(缓存),因此下一次尝试内存分配可以成功.
void no_memory ()
{
if(cached_data.exist())
{
std::cout << "Free cache memory so the allocation can succeed!\n";
cached_data.remove();
}
else
{
std::cout << "Failed to allocate memory!\n";
std::exit (1); // Or throw an expection...
}
}
std::set_new_handler(no_memory);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |