Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::set_new_handler(3)	      C++ Standard Libary      std::set_new_handler(3)

NAME
       std::set_new_handler - std::set_new_handler

Synopsis
	  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)

	  Makes	new_p the new global new-handler function and returns the pre-
       viously installed
	  new-handler.

	  The new-handler function is the function called by allocation	 func-
       tions whenever a
	  memory  allocation  attempt  fails.  Its  intended purpose is	one of
       three things:

	  1) make more memory available
	  2) terminate the program (e.g. by calling std::terminate)
	  3)  throw  exception	of  type  std::bad_alloc   or	derived	  from
       std::bad_alloc.

	  The  default	implementation throws std::bad_alloc. The user can in-
       stall his own
	  new-handler, which may offer behavior	 different  than  the  default
       one.

	  If  new-handler  returns, the	allocation function repeats the	previ-
       ously-failed
	  allocation attempt and calls the new-handler again if	the allocation
       fails again. To
	  end the loop,	new-handler  may  call	std::set_new_handler(nullptr):
       if, after a failed
	  allocation attempt, allocation function finds	that std::get_new_han-
       dler returns a
	  null pointer value, it will throw std::bad_alloc.

	  At program startup, new-handler is a null pointer.

	  This function	is thread-safe.	Every call to std::set_new_handler
	  synchronizes-with    (see    std::memory_order)    the    subsequent
       (since C++11)
	  std::set_new_handler and std::get_new_handler	calls.

Parameters
	  new_p	- pointer  to  function	 of  type  std::new_handler,  or  null
       pointer

Return value
	  The  previously-installed  new  handler,  or a null pointer value if
       none was	installed.

Example
       // Run this code

	#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) {
		    new	int[1000'000'000ul]();
		}
	    } catch (const std::bad_alloc& e) {
		std::cout << e.what() << '\n';
	    }
	}

Possible output:
	Memory allocation failed, terminating
	std::bad_alloc

See also
	  operator new	  allocation functions
	  operator new[]  (function)
	  get_new_handler obtains the current new handler
	  (C++11)	  (function)
	  new_handler	  function pointer type	of the new handler
			  (typedef)
	  bad_alloc	  exception thrown when	memory allocation fails
			  (class)

http://cppreference.com		  2022.07.31	       std::set_new_handler(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::set_new_handler&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help