18 Language support library [language.support]

18.6 Dynamic memory management [support.dynamic]

18.6.2 Storage allocation errors [alloc.errors]

18.6.2.1 Class bad_alloc [bad.alloc]

namespace std {
  class bad_alloc : public exception {
  public:
    bad_alloc() noexcept;
    bad_alloc(const bad_alloc&) noexcept;
    bad_alloc& operator=(const bad_alloc&) noexcept;
    virtual const char* what() const noexcept;
  };
}

The class bad_alloc defines the type of objects thrown as exceptions by the implementation to report a failure to allocate storage.

bad_alloc() noexcept;

Effects: Constructs an object of class bad_alloc.

Remarks: The result of calling what() on the newly constructed object is implementation-defined.

bad_alloc(const bad_alloc&) noexcept; bad_alloc& operator=(const bad_alloc&) noexcept;

Effects: Copies an object of class bad_alloc.

virtual const char* what() const noexcept;

Returns: An implementation-defined ntbs.

18.6.2.2 Class bad_array_new_length [new.badlength]

namespace std {
  class bad_array_new_length : public bad_alloc {
  public:
    bad_array_new_length() noexcept;
  };
}

The class bad_array_new_length defines the type of objects thrown as exceptions by the implementation to report an attempt to allocate an array of size less than zero or greater than an implementation-defined limit ([expr.new]).

bad_array_new_length() noexcept;

Effects: constructs an object of class bad_array_new_length.

Remarks: the result of calling what() on the newly constructed object is implementation-defined.

18.6.2.3 Type new_handler [new.handler]

typedef void (*new_handler)();

The type of a handler function to be called by operator new() or operator new[]() ([new.delete]) when they cannot satisfy a request for additional storage.

Required behavior: A new_handler shall perform one of the following:

  • make more storage available for allocation and then return;

  • throw an exception of type bad_alloc or a class derived from bad_alloc;

  • terminate execution of the program without returning to the caller;

18.6.2.4 set_new_handler [set.new.handler]

new_handler set_new_handler(new_handler new_p) noexcept;

Effects: Establishes the function designated by new_p as the current new_handler.

Returns: The previous new_handler.

Remarks: The initial new_handler is a null pointer.

18.6.2.5 get_new_handler [get.new.handler]

new_handler get_new_handler() noexcept;

Returns: The current new_handler. [ Note: This may be a null pointer value.  — end note ]