New (C++)

New (C++)

In the C++ programming language, new is an operator that allows dynamic memory allocation on the heap. new attempts to allocate enough memory on the heap for the new data and, if successful, returns the address to the newly allocated memory.

yntax

The syntax for new is::p_var = new typename;where 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 type(initializer);where initializer is the initial value assigned to the new variable, or if type is of class type, initializer is the arguments 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 p_var, so:p_var [n] gives the value of the nth element (counting from zero)

Memory allocated with new must be deallocated with delete to avoid a memory leak. Arrays allocated with new [] must be deallocated with [delete (C++)|delete [] .

int* p_scalar = new int(5);int* p_array = new int [5] ;

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.

Implementation

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

Any memory dynamically allocated with new must be released with a delete command. There are two variants: one for arrays and one for single objects.

int *p_var = new int;int *p_array = new int [50] ; delete p_var;delete [] p_array;

Note that the compiler will generate neither a warning nor an error 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 can result in undefined behavior.

Reallocating memory allocated by new []

In contrast to C's realloc, it is not directly possible to reallocate memory allocated by new [] ; in order 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.

ee also

* malloc
* Memory pool
* Pointers
* Smart pointers
* Exception handling

References

* [http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=/com.ibm.vacpp6m.doc/language/ref/clrc05cplr199.htm IBM Documentation describing C++'s operator new]
* [http://msdn2.microsoft.com/en-us/library/kewsb8ba(VS.71).aspx Microsoft Visual Studio operator new documentation]


Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Look at other dictionaries:

  • New — (n[=u]), a. [Compar. {Newer} (n[=u] [ e]r); superl. {Newest}.] [OE. OE. newe, AS. niwe, neowe; akin to D. nieuw, OS. niwi, OHG. niuwi, G. neu, Icel. n[=y]r, Dan. & Sw. ny, Goth. niujis, Lith. naujas, Russ. novuii, Ir. nua, nuadh, Gael. nuadh, W.… …   The Collaborative International Dictionary of English

  • New (C++) — В языке программирования C++, new оператор, обеспечивающий выделение динамической памяти в куче. За исключением формы, называемой «размещающей формой new», new пытается выделить достаточно памяти в куче для размещения новых данных и, в случае… …   Википедия

  • New — «New» Sencillo de No Doubt del álbum Retourn Of Saturn Formato CD Single Grabación 1999 Género(s) New Wave Duración 3:04 …   Wikipedia Español

  • New I/O — New I/O, usually called NIO, is a collection of Java programming language APIs that offer features for intensive I/O operations. It was introduced with the J2SE 1.4 release of Java by Sun Microsystems to complement an existing standard I/O. NIO… …   Wikipedia

  • New — (n[=u]), adv. Newly; recently. Chaucer. [1913 Webster] Note: New is much used in composition, adverbially, in the sense of newly, recently, to qualify other words, as in new born, new formed, new found, new mown. [1913 Webster] {Of new}, anew.… …   The Collaborative International Dictionary of English

  • New FM — City of license Newcastle Slogan Hottest Songs from the 80 s, 90 s and Today Frequency 105.3 MHz First air date 6 May 1989 ( …   Wikipedia

  • NEW — ist: das IATA Kürzel für den New Orleans Lakefront Airport das Kfz Kennzeichen des Landkreises Neustadt an der Waldnaab new ist: das Kürzel für die Sprache Newari nach ISO 639 2 New ist ein englischer Familienname. Harry S. New (1858–1937), US… …   Deutsch Wikipedia

  • New — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom. NEW, sigle composé des trois lettres N, E et W, peut faire référence à : Lakefront Airport, un aéroport régional de la Nouvelle Orléans en Louisiane …   Wikipédia en Français

  • New — New, v. t. & i. To make new; to renew. [Obs.] [1913 Webster] …   The Collaborative International Dictionary of English

  • New TV — est une chaîne de télévision fondée par Tahsin Khayat. Elle se situe à Beyrouth, spécifiquement à la Mazraa . Son service politique est dirigé par la journaliste Maria Maalouf …   Wikipédia en Français

  • New — (engl., spr. Njuh), neu. Alle damit zusammengesetzten englischen geographischen Artikel, die sich hier nicht finden, s.u. Neu …   Pierer's Universal-Lexikon

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”