devxlogo

Setting a New Handler

Setting a New Handler

The function std::set_new_handler() installs a function to be called when the global operator new or the global operator new[] fail. By default, operator new throws an exception of type std::bad_alloc in the event of a failure (note that Visual C++ still retains the traditional version of new, which doesn’t throw an exception in this case). set_new_handler() and its associated typedef’s are declared in the header as follows:

 typedef void (*new_handler) ();new_handler set_new_handler( new_handler new_p );

set_new_hanlder() returns the address of the current handler and installs an overriding handler.

The following program overrides the default behavior of the global operators new and new[]. Instead of throwing an std::bad_alloc exception, it invokes the user-defined function my_handler():

 #include using namespace std;class my_exception{};void my_hanlder(){  cerr << "allocation failure!" << endl; throw my_exception();}int main(){ set_new_handler(my_handler); try {  int *p = new int[2000000000]; // will probably fail   delete[] p;//we get here only if the allocation succeeded } catch (my_exception & e) { //..deal with the exception }}
See also  The Benefits of Patient Engagement Solutions for Healthcare Providers
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist