Speicherlecks durch return-Pointer-Funktionen?
Verfasst: 17.02.2011, 14:33
Hallo,
ich habe ein kleines Problem bei der Verwendung von Pointern als Rückgabewerte. Und zwar habe ich mir z.B. eine Klasse Vektor geschrieben:
und diesen kann ich jetzt ja z.B. so verwenden:
und alles funktioniert, ich muss hinterher dann eben den Speicherbereich für a, b und c wieder freigeben.
Verwende ich das allerdins so:
dann würde ja einmal für den Aufruf (*a+b) Speicherplatz reserviert und dann für *()+c nochmals (den ich dann über delete d; wieder freigeben kann). Aber danach hab ich ja keine Chance den Speicher der bei der ersten Addition reserviert wurde wieder freizugeben, oder sehe ich das falsch?
Dieses Problem tritt ja immer dann auf, sobald ich in einer Funktion Speicher reserviere und den Pointer darauf zurückgebe, aber dieser nicht gespeichert wird. Oder hat da der Compiler eine Erkennung drin, dass dieser dann automatisch ein delete einbaut? Oder muss ich das Ganze anders handhaben, also darf ich generell keine Pointer zurückgeben, also wäre es besser wenn ich das Ergebnis in einem zusätzlichen Parameter speichern lasse?
Hoffe, ihr könnt mir zu etwas mehr Verständis verhelfen...
Danke
hundvdf
ich habe ein kleines Problem bei der Verwendung von Pointern als Rückgabewerte. Und zwar habe ich mir z.B. eine Klasse Vektor geschrieben:
Code: Alles auswählen
class Vektor {
public:
Vektor *operator+(Vektor *v);
private:
float x,y,z;
}
Vektor *Vektor::operator+(Vektor *v) {
Vektor *neu=new Vektor();
neu->x=this->x+v->x;
neu->y=this->y+v->y;
neu->z=this->z+v->z;
return neu;
}
Code: Alles auswählen
Vektor *a=new Vektor();
Vektor *b=new Vektor();
Vektor *c=*a+b;
Verwende ich das allerdins so:
Code: Alles auswählen
Vektor *a=new Vektor();
Vektor *b=new Vektor();
Vektor *c=new Vektor();
Vektor *d=*(*a+b)+c;
Dieses Problem tritt ja immer dann auf, sobald ich in einer Funktion Speicher reserviere und den Pointer darauf zurückgebe, aber dieser nicht gespeichert wird. Oder hat da der Compiler eine Erkennung drin, dass dieser dann automatisch ein delete einbaut? Oder muss ich das Ganze anders handhaben, also darf ich generell keine Pointer zurückgeben, also wäre es besser wenn ich das Ergebnis in einem zusätzlichen Parameter speichern lasse?
Hoffe, ihr könnt mir zu etwas mehr Verständis verhelfen...
Danke
hundvdf