Reference
C Library
IOstream Library
Strings library
STL Containers
STL Algorithms
Miscellaneous
Miscellaneous
complex
exception
functional
iterator
limits
locale
memory
new
numeric
stdexcept
typeinfo
utility
valarray
new
bad_alloc
new_handler
nothrow
nothrow_t
set_new_handler
global namespace:
operator delete
operator delete[]
operator new
operator new[]


set_new_handler

function
<new>
new_handler set_new_handler (new_handler new_p) throw();

Set new handler function

Sets new_p as the new handler function.

The new handler function is the function that is called by functions operator new or operator new[] when they are not successful in an attempt to allocate memory.

The new handler function can make more storage available for a new attempt to allocate the storage. If, and only if, the function succeeds in making more storage avaible, it may return. Otherwise it shall either throw a bad_alloc exception (or a derived class) or terminate the program with cstdlib's abort or exit functions.

If the new handler function returns (i.e., it made more storage available), it can be called again if the operator new or operator new[] function is again not successful attempting to allocate the storage. This may repeat itself until either the allocation is successful or the handler function fails.

Parameters

new_p
Function that takes no parameters and returns void.
The function can make more storage available or throw an exception or terminate the program.
new_handler is a function pointer type taking no parameters and returning void.

Return value

The value of the current new_handler function if this has been previously set by this function, or a null pointer if this is the first call to set_new_handler.
new_handler is a function pointer type taking no parameters and returning void.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// new_handler example
#include <iostream>
#include <cstdlib>
#include <new>
using namespace std;
void no_memory () {
  cout << "Failed to allocate memory!\n";
  exit (1);
}
int main () {
  set_new_handler(no_memory);
  cout << "Attempting to allocate 1 GiB...";
  char* p = new char [1024*1024*1024];
  cout << "Ok\n";
  delete[] p;
  return 0;
}


Possible output:

Attempting to allocate 1 GiB... Ok

See also