malloc und free wissen nichts über die Konstruktion und Destruktion von Objekten:
class String { char *value; public: String(const char* val=0); ~String(); }; String* array1=(String*) malloc(10*sizeof(String)); String* array2 = new String[10];
array1 zeigt auf einen Speicherbereich für 10 Strings.
array2 zeigt auf einen Speicherbereich mit 10 vollständig konstruierten Strings.
Ähnlich verläuft es bei der Speicherfreigabe:
free(array1); delete [] array2;
free gibt den Speicher für die 10 Strings wieder frei. Die Stringobjekte, die evtl. selbst wieder Speicher allokiert haben, werden nicht zerstört.
delete [] hat genau den gewünschten Effekt.