In the C++ programming language, placement syntax allows programmers to explicitly specify the memory management of individual objects — i.e. their "placement" in memory. Normally, when an object is created dynamically, an allocation function is invoked in such a way that it will both allocate memory for the object, and initialize the object within the newly allocated memory. The placement syntax allows the programmer to supply additional arguments to the allocation function. A common use is to supply a pointer to a suitable region of storage where the object can be initialized, thus separating memory allocation from object construction.
The "placement" versions of the new
and delete
operators and functions are known as placement new
and placement delete
. A new
expression, placement or otherwise, calls a new
function, also known as an allocator function, whose name is operator new
. Similarly, a delete
expression calls a delete
function, also known as a deallocator function, whose name is operator delete
.
Any new
expression that uses the placement syntax is a placement new
expression, and any operator new
or operator delete
function that takes more than the mandatory first parameter (std::size_t
and void *
, respectively) is a placement new or placement delete function.
In earlier versions of C++ there was no such thing as placement new; instead, developers used explicit assignment to this within constructors to achieve similar effect. This practice has been deprecated and abolished later, and third edition of The C++ Programming Language doesn't mention this technique.