Dinamikus objektumok létrehozására a C++ new operátora szolgál. Tekintsük erre a következõ példát:
circle *egy_kor = new circle(100,200,50);Ennek hatására az egy_kor azonosítójú circle típusra mutató pointer megkapja egy sizeof(circle) darab byte méretû, circle típusú objektum számára lefoglalt tárterület címét. A tárterület-foglalás során végrehajtásra kerül a circle( ) konstruktor-hívás is. A létrehozott új "kör" középpontjának koordinátái rendre 100 és 200, míg a sugár értéke 50 lesz.
A new operátorral tömbök számára is foglalhatunk helyet. A new-nak ez az alternatív szintaxisa a következõ:
new típus [méret]
A kifejezés értéke az adott típus számára lefoglalt adott méretû tömbre mutató pointer lesz.
A new-val történõ memória-foglaláskor fellépõ hibákat a _new_handler pointer (elõredefiniált globális változó) által mutatott függvény kezeli le. Alapértelmezésben sikertelen tárterület-foglalási kisérlet esetén new visszatérési értéke NULL, és programunk futása úgy folytatódhat, mintha mi sem történt volna, ugyanis a _new_handler-en keresztül aktivizált hibakezelõ nem csinál semmit. Ugyanakkor lehetõségünk van arra, hogy a _new_handler-t egy saját hibakezelõre állítsuk a set_new_handler( ) függvényhívás segítségével. Ezt a következõ példa szemlélteti:
#include <iostream.h>
#include <stdlib.h>
// ***********************************************************
void out_of_store(void) // Sajat hibakezelo-fv. new-hoz
// ***********************************************************
{
cerr << "operator new failed: out of store\n";
exit(1); // cerr-t lasd 3.11.3. alatt
}
// ***********************************************************
typedef void (*PF)(); // Fuggvenyre mutato tipus
extern PF set_new_handler(PF);// _new_handler-t allitja
struct pp { double x,y,z,w; // Nagy struktura. Ennek pro-
long a,b,c,d; };// balunk sok helyet foglalni
// ***********************************************************
main() // _new_handler atallitasat szemlelteto program
// ***********************************************************
{
set_new_handler(&out_of_store);
pp *p = new pp[65535];
cout << "Meghivtuk new-t, p = " << long(p) << '\n';
} // cout-ot is lasd 3.11.3 allatt
// ***********************************************************
A fenti program soha sem fog "normálisan" lefutni, hanem mindig
az operator new failed: out of store üzenetet kapjuk a képernyõn
és visszatérünk 1-es hibakóddal az operációs
rendszerhez.