C语言中new-handler机制是如何实现长尾处理功能的?

2026-04-19 03:160阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计4102个文字,预计阅读时间需要17分钟。

C语言中new-handler机制是如何实现长尾处理功能的?

当`operator new`无法满足一个内存分配请求时,它将抛出一个异常(异常)。很久以前,它通常会返回一个空指针(null pointer)。一些较老的编译器仍然这样做。你当然可以达成之前的目标()。

  当 operator new 不能满足一个内存分配请求时,它抛出一个 exception(异常)。很久以前,他返回一个 null pointer(空指针),而一些比较老的编译器还在这样做。你依然能达到以前的目的(在一定程度上),但是我要到本文的最后再讨论它。

  在 operator new 因回应一个无法满足的内存请求而抛出一个 exception 之前,它先调用一个可以由客户指定的被称为 new-handler 的 error-handling function(错误处理函数)。(这并不完全确切,operator new 真正做的事情比这个稍微复杂一些,详细细节将在下一篇文章中讨论。)为了指定 out-of-memory-handling function,客户调用 set_new_handler ——一个在 <new> 中声明的标准库函数:

namespace std {  typedef void (*new_handler)();  new_handler set_new_handler(new_handler p) throw(); }

  就像你能够看到的,new_handler 是一个指针的 typedef,这个指针指向不取得和返回任何东西的函数,而 set_new_handler 是一个取得和返回一个 new_handler 的函数。(set_new_handler 的声明的结尾处的 "throw()" 是一个 exception specification(异常规范)。

阅读全文

本文共计4102个文字,预计阅读时间需要17分钟。

C语言中new-handler机制是如何实现长尾处理功能的?

当`operator new`无法满足一个内存分配请求时,它将抛出一个异常(异常)。很久以前,它通常会返回一个空指针(null pointer)。一些较老的编译器仍然这样做。你当然可以达成之前的目标()。

  当 operator new 不能满足一个内存分配请求时,它抛出一个 exception(异常)。很久以前,他返回一个 null pointer(空指针),而一些比较老的编译器还在这样做。你依然能达到以前的目的(在一定程度上),但是我要到本文的最后再讨论它。

  在 operator new 因回应一个无法满足的内存请求而抛出一个 exception 之前,它先调用一个可以由客户指定的被称为 new-handler 的 error-handling function(错误处理函数)。(这并不完全确切,operator new 真正做的事情比这个稍微复杂一些,详细细节将在下一篇文章中讨论。)为了指定 out-of-memory-handling function,客户调用 set_new_handler ——一个在 <new> 中声明的标准库函数:

namespace std {  typedef void (*new_handler)();  new_handler set_new_handler(new_handler p) throw(); }

  就像你能够看到的,new_handler 是一个指针的 typedef,这个指针指向不取得和返回任何东西的函数,而 set_new_handler 是一个取得和返回一个 new_handler 的函数。(set_new_handler 的声明的结尾处的 "throw()" 是一个 exception specification(异常规范)。

阅读全文