|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in header <new> | ||
std::new_handler set_new_handler(std::new_handler new_p)throw(); | (until C++11) | |
std::new_handler set_new_handler(std::new_handler new_p)noexcept; | (since C++11) | |
Makesnew_p the new global new-handler function and returns the previously installed new-handler.
Thenew-handler function is the function called byallocation functions whenever a memory allocation attempt fails. Its intended purpose is one of three things:
The default implementation throwsstd::bad_alloc. The user can install their ownnew-handler, which may offer behavior different than the default one.
Ifnew-handler returns, the allocation function repeats the previously-failed allocation attempt and calls thenew-handler again if the allocation fails again. To end the loop,new-handler may callstd::set_new_handler(nullptr): if, after a failed allocation attempt, allocation function finds thatstd::get_new_handler returns a null pointer value, it will throwstd::bad_alloc.
At program startup,new-handler is a null pointer.
This function is thread-safe. Every call to | (since C++11) |
Contents |
| new_p | - | pointer to function of typestd::new_handler, or null pointer |
The previously-installed new handler, or a null pointer value if none was installed.
#include <iostream>#include <new> void handler(){std::cout<<"Memory allocation failed, terminating\n"; std::set_new_handler(nullptr);} int main(){ std::set_new_handler(handler);try{while(true){ newint[1000'000'000ul]();}}catch(conststd::bad_alloc& e){std::cout<< e.what()<<'\n';}}
Possible output:
Memory allocation failed, terminatingstd::bad_alloc
| allocation functions (function)[edit] | |
(C++11) | obtains the current new handler (function)[edit] |
| function pointer type of the new handler (typedef)[edit] | |
| exception thrown when memory allocation fails (class)[edit] |