delete, wenn Variable kein Zeiger?

Unicate

Erfahrenes Mitglied
Hi, all!

Ich habe mich heute mit dem Überladen von Operatoren versucht. Hat auch einigermaßen gut geklappt. Nur kann ich meine Instanziierten Objekte nicht mehr löschen bzw. weiß ich nicht wie ich das richtig veranstalten soll.

Der Code meiner main:
Code:
#include <iostream>
#include "String.h"

using namespace std;

int main(int argc, char **argv) {
	String test = "Das ist ein String der Klasse String ";
	test += test;
	cout << test << endl;
//	delete test; //Geht gar nicht (Fehler: Argument vom Typ »class String« wurde an »delete« übergeben, Zeiger erwartet)
//	delete &test; //Funktioniert, zeigt aber Warnung: Die Adresse von »test« wird nie NULL sein
	return 0;
}

Wie bekomm ich die Warnung weg(ohne -Wall weg zulassen ;) ), bzw wie kann ich mein Objekt löschen?
 
Hallo,

lokale Variablen werden auf dem Stack angelegt, den du nicht selber verwalten musst. Der Stack wird automatisch beim Verlassen der Funktion aufgeräumt.

Grüße, Matthias
 
Theoretisch hast du ja recht, aber es geht ums prinzip.
Ich sollte doch in der Lage sein, meine Objekte zu killen oder?

Warum geht es nicht?
 
Es steht dir frei, in deiner Klasse eine Methode zu implementieren, welche die von der Instanz verwalteten Resourcen freigibt.

Wie gesagt: der Stack wird automatisch verwaltet. Mach dir am besten mal klar, was Stack und Heap sind.

Grüße, Matthias

Hatte den letzten Satz überlesen, danke, jetzt isses klar.

Für alle die die selbe Fragen haben

Hier noch ein Beispiel:

Code:
int main(int argc, char **argv) {
	String *heap = new String("Ich bin ein String auf dem Heap");
	String stack("Ich bin ein String auf dem Stack");
	cout << stack << endl; //muss << überladen
	cout << heap << endl; // muss << zusätzlich zur stack variante überladen
	delete heap;


	return 0;
}
 
Zuletzt bearbeitet:
Zurück