From Seo Wiki - Search Engine Optimization and Programming Languages
In the C++ programming language, new is an operator that allows dynamic memory allocation on the heap. Except for a form called the "placement new", new attempts to allocate enough memory on the heap for the new data and, if successful, returns the address to the newly allocated memory. However if new can not allocate memory on the heap it will throw an exception of type
std::bad_alloc. This removes the need to explicitly check the result of an allocation.
The syntax for new is:
p_var = new typename;
p_var is a previously declared pointer of type
typename can be any basic data type or user-defined object (
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 type(initializer);
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.
new can also create an array:
p_var = new type [size];
In this case,
size specifies the length of one-dimensional array to create. The address of the first element is returned and stored into
gives the value of the
nth element (counting from zero)
int *p_scalar = new int(5); int *p_array = new int;
Initializers cannot be specified for arrays created with
new. All elements of an array are initialized with the default constructor of the type. If the type does not have a default constructor, this is a compile-time error.
In compilers conforming to the ISO C++ standard, if there is not enough memory for the allocation, the code throws an exception of type
std::bad_alloc. All subsequent code is aborted until the error is handled in a try-catch block or the program exits abnormally. The program does not need to check the value of the pointer; if no exception was thrown, the allocation succeeded. The implemented operations are defined in the header
<new>. In most C++ implementations the
new operator can also be overloaded to define specific behaviors.
Releasing dynamically allocated memory
int *p_var = new int; int *p_array = new int; delete p_array; delete p_var;
Note that the compiler is not required to generate a diagnostic message for using the wrong
delete; it cannot know in general whether a pointer is to a single element or an array of elements. Furthermore, using the inappropriate deallocator will result in undefined behavior.
Reallocating memory allocated by
In contrast to C's
realloc, it is not possible to directly reallocate memory allocated with
new. To extend or reduce the size of a block, one must allocate a new block of adequate size, copy over the old memory, and delete the old block.
The C++ standard library provides a dynamic array that can be extended or reduced in its
- Delete (C++)
- Exception handling
- Memory pool
- Placement syntax
- Smart pointers
- IBM Documentation describing C++'s operator new
- Microsoft Visual Studio operator new documentationmk:New (C++ оператор)