Wenn du die Variablen nur auf dem Stack erzeugst, brauchst du die nicht freigegeben. Sobald der Geltungsbereich verlassen wird, wird automatisch der Destruktor aufgerufen. Nur wenn du Variablen mit "new" auf dem Heap anlegst, musst du den Speicher mit delete freigeben.
Ich möchte noch hinzufügen, dass "nicht zu brauchen" hier zu schwach ist. Man darf delete nicht mit der Adresse eines Stack-Objekts aufrufen. Wenn's nicht direkt kracht, weil z.B. der Destruktor zweimal aufgerufen wird, gibt's zumindest undefiniertes Verhalten.
wird nicht immer notwendigerweise auf dem Stack alloziert, es kann sich auch um eine globale Variable handeln. Trotzdem muss sie dann nicht (bzw. darf nicht) mit delete gelöscht werden.
Nein, auf keinen Fall. Das könnte zu Exceptions führen.
delete hat zwei Aspekte a) Aufruf des Destruktors b) Freigabe des Speicherplatzes
Die Frage ist nicht ganz eindeutig gestellt.
Handelt es sich um eine Variable die ausserhalb einer Methode oder Funktion angelegt wird, dann ist es eine globale, eventuell eine Modulglobale (static) Variable. Der Destruktor wird dann nach dem exit () / Verlassen des main () aufgerufen. Die Reihenfolge ist undefiniert Der Speicherplatz muß nicht freigegeben werden, das macht das Runtimesystem selbst
Befindet sich die Variable innerhalb einer Methode oder Funktion, dann heißt sie automatische Variable und wird auf dem Stack abgelegt. Der Destruktor wird beim dem Verlassen des aktuellen Blocks (das sind die { }) aufgerufen. Die Reihenfolge entspricht der Anlage Auch hier braucht man kein delete aufrufen.