In the C++ programming language, and are a pair of language constructs that perform dynamic memory allocation, object construction and object destruction. Overview Except for a form called the "placement new", the operator denotes a request for memory allocation on a process's heap. If sufficient memory is available, initialises the memory, calling object constructors if necessary, and returns the address to the newly allocated and initialised memory. A request, in its simplest form, looks as follows: p = new T; where is a previously declared pointer of type (or some other type to which a pointer can be assigned, such as a superclass of ). The default constructor for , if any, is called to construct a instance in the allocated memory buffer. If not enough memory is available in the free store for an object of type , the request indicates failure by throwing an exception of type . This removes the need to explicitly check the result of an allocation. The deallocation counterpart of is , which first calls the destructor (if any) on its argument and then returns the memory allocated by back to the free store. Every call to must be matched by a call to ; failure to do so causes a memory leak. syntax has several variants that allow finer control over memory allocation and object construction. A function call-like syntax is used to call a different constructor than the default one and pass it arguments, e.g., p = new T(argument); calls a single-argument constructor instead of the default constructor when initializing the newly allocated buffer. A different variant allocates and initialises arrays of objects rather than single objects: p = new T [N]; This requests a memory buffer from the free store that is large enough to hold a contiguous array of objects of type , and calls the default constructor on each element of the array. Memory allocated with the must be deallocated with the operator, rather than . Using the inappropriate form results in undefined behavior. C++ compilers are not required to generate a diagnostic message for using the wrong form. The C++11 standard specifies an additional syntax, p = new T[N] {initializer1, ..., initializerN}; that initializes each to . Error handling If cannot find sufficient memory to service an allocation request, it can report its error in three distinct ways. Firstly, the ISO C++ standard allows programs to register a