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.