400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

怎么在C++中使用set_new_handler函数-创新互联

怎么在C++中使用set_new_handler函数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在新建等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、成都网站制作、外贸网站建设 网站设计制作按需制作网站,公司网站建设,企业网站建设,高端网站设计,营销型网站建设,成都外贸网站制作,新建网站建设费用合理。

一、函数的定义

函数在namespace std中有如下定义(C++98与C++11版本不一致):

Typedef void (*new_handler)();
 
new_handler set_new_handler(new_handler new_p) throw();  //C++98
new_handler set_new_handler (new_handler new_p) noexcept; //C++11

二、函数介绍

该函数的作用是:当new操作或new[]操作失败时调用参数所指的new_p函数

异常安全:

数据争用:

函数说明

1.   set_new_handler函数的作用是设置new_p指向的函数为new操作或new[]操作失败时调用的处理函数。

2.   设置的处理函数可以尝试使更多空间变为可分配状态,这样新一次的new操作就可能成功。当且仅当该函数成功获得更多可用空间它才会返回;否则它将抛出bad_alloc异常(或者继承该异常的子类)或者终止程序(例如调用abort或exit)。

3.   如果设置的处理函数返回了(例如,该函数成功获得了更多的可用空间),它可能将被反复调用,直到内存分配成功,或者它不再返回,或者被其它函数所替代。

4.   在尚未用set_new_handler设置处理函数,或者设置的处理函数为空时,将调用默认的处理函数,该函数在内存分配失败时抛出bad_alloc异常。

三、函数的参数
new_p:

设置的处理函数可以尝试使更多空间变为可分配状态,这样新一次的new操作就可能成功。当且仅当该函数成功获得更多可用空间它才会返回;否则它将抛出bad_alloc异常(或者继承该异常的子类)或者终止程序(例如调用abort或exit)

如果设置的处理函数返回了(例如,该函数成功获得了更多的可用空间),它可能将被反复调用,直到内存分配成功,或者它不再返回,或者被其它函数所替代

如果未设置处理函数,或者设置的处理函数为空时,将调用默认的处理函数,该函数在内存分配失败时抛出bad_alloc异常

四、函数的返回值

五、演示案例

下面程序中new操作分配内存失败时将调用no_memory函数

// new_handler example
#include    // std::cout
#include    // std::exit
#include      // std::set_new_handler
 
void no_memory () {
 std::cout << "Failed to allocate memory!\n";
 std::exit (1);
}
 
int main () {
  //绑定no_memory处理函数
  std::set_new_handler(no_memory);
  
  std::cout << "Attempting to allocate 1 GiB...";
  char* p = new char [1024*1024*1024];
  std::cout << "Ok\n";
  
  delete[] p;
  return 0;
}

关于怎么在C++中使用set_new_handler函数问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联网站建设公司行业资讯频道了解更多相关知识。

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:怎么在C++中使用set_new_handler函数-创新互联
URL链接:http://mbwzsj.com/article/dhdsos.html

其他资讯

让你的专属顾问为你服务