In C wird Speicher mit den Funktionen malloc() und free() angefordert, bzw. freigegeben. In C dürfen void-Zeiger auf einen beliebigen Typ ohne Cast zugewiesen werden. In C++ darf man das sinnvollerweise nicht mehr. Beide Funktionen arbeiten mit void *, so dass man malloc() in C++ erst auf den jeweiligen Datentyp casten muss und man die benötigte Größe selbst berechnen muss:
int * pInt = (int *) malloc( sizeof( int ) ); ... free( pInt );
Der Operator new
geht das Problem an und liefert einen Zeiger auf den richtigen Datentyp zurück.
int * pInt = new int; ... delete pInt;
Ein int ist 4 Bytes ( bzw. sizeof(int) Bytes ) groß, dies berechnet new im Gegensatz zu malloc nun selbst.
Arrays werden ebenfalls mit new und delete angefordert. Dennoch gibt es hier einen Unterschied: Es wird ein new []
verwendet und entsprechend wird auch ein delete []
verwendet.
int * pInt = new int[10]; ... delete [] pInt;
Hierbei ist wichtig, dass Arrays mit delete []
freigegeben werden müssen. Dies wird später bei der Verwendung von Klassen notwendig.