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.