placement syntax

This is an old revision of this page, as edited by KurtRaschke (talk | contribs) at 19:05, 20 November 2008 (Proposing article for deletion per WP:PROD. (TW)). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

In the C++ programming language, the placement new is a form of the new operator that allows object construction into an existing memory buffer. Unlike other forms of new, the new object does not have to be in heap memory. The pointer returned by the placement new is the pointer provided as an argument casted to the type of the new object.

Syntax

The syntax for the placement new:

p_var = new(p_place) typename;

where p_place provides a pointer of type void. When the user has provided the new function, p_place may also be the placement arguments to that function. p_var is a previously declared pointer of type typename. typename can be any basic data type or user-defined object (enum, class, and struct included). If typename is of class type, the default constructor is called to construct the object.

To initialize a new variable created via new, use the following syntax:

p_var = new(p_place) type(initializer);

where initializer is the initial value assigned to the new variable, or if type is of class type, initializer is the argument(s) to a constructor.

Placement new can also create an array:

p_var = new(p_place) type [size];

In this case, size specifies the length of one-dimensional array to create.

When using placement new, there is often no reason to use the return pointer value. In these cases p_var is not used and the syntax can be simplfied to one of these:

new(p_place) typename;
new(p_place) type(initializer);
new(p_place) type [size];

Although an object created with the placement new is not normally deleted, it may be neccesary to call its destructor. This is done with the following syntax:

p_var->~type();

See also

References