Name
new operator — Allocates a dynamic object or array of objects
Synopsis
new-expr ::= [::] new [placement] new-type-id [new-initializer] |
[::] new [placement] ( type-id ) [new-initializer]
placement ::= ( expr-list )
new-type-id ::= type-specifier-seq [new-declarator]
new-declarator ::= ptr-operator [new-declarator] | direct-new-declarator
direct-new-declarator ::= "[" expression "]" |
direct-new-declarator "[" constant-expr "]"
new-initializer ::= ( [expr-list] )
ptr-operator ::= * [cv-qualifier-seq] | & | [::] nested-name :: * [cv-qualifier-seq]The new expression allocates
memory and constructs an object. It has many forms, the simplest being
a simple type name (e.g., new
int). The new-type-id can be a sequence of type
specifiers and qualifiers, with pointer operators, a reference
operator, and an array size (e.g., new int*[n][42], which allocates a
two-dimensional array of pointers to int with n rows and 42 columns). The first dimension
can be an integral expression; the second and subsequent dimensions
must be constant expressions. If the type contains parentheses, such
as function pointers, you should enclose it in parentheses to avoid
ambiguity.
The new expression calls an
allocator function to allocate the necessary memory, then initializes
the memory. The new-initializer
is an optional list of expressions in parentheses. If no new-initializer is present, the new object is initialized to its default value: POD objects are uninitialized, and other objects are initialized ...