Bei primitiven Datentypen wird der Speicher zwar offenbar auch mit delete freigegeben, aber - wie du selbst bemerkt hast - ist das alles andere als verlässlich und um genau zu sein sogar undefiniertes Verhalten.
Spätestens sobald du Klassen mit RAII hast, d.h. allozierter Speicher wird in den Destruktoren wieder freigegeben, bekommst du einen Memory Leak, weil die Destruktoren nur mit delete[] aufgerufen werden.
Problematisch kann es auch bei Operatorüberladung werden: http://www.parashift.com/c%2B%2B-faq...built-ins.html