一、函数的定义 函数在namespace std中有如下定义(C++98与C++11版本不一致): Typedef void (*new_handler)(); new_handler set_new_handler(new_handler new_p) throw(); //C++98new_handler set_new_handler (new_handler new_p) noexcept; //C++11 二、
一、函数的定义 函数在namespace std中有如下定义(C++98与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操作就可能成功。当且仅当该函数成功获得更多可用空间它才会返回;否则它将抛出bad_alloc异常(或者继承该异常的子类)或者终止程序(例如调用abort或exit) 如果设置的处理函数返回了(例如,该函数成功获得了更多的可用空间),它可能将被反复调用,直到内存分配成功,或者它不再返回,或者被其它函数所替代 如果未设置处理函数,或者设置的处理函数为空时,将调用默认的处理函数,该函数在内存分配失败时抛出bad_alloc异常 四、函数的返回值
五、演示案例 下面程序中new操作分配内存失败时将调用no_memory函数
|
2022-05-13
2022-03-10
2021-07-02
2021-08-14
2021-05-17