Senior Sanchez
2010-09-16, 14:32:24
Hi,
Also ich programmiere nun seit langer Zeit mal wieder etwas mehr C++ und angesichts der Frage kann ich schon gleich sagen, dass ich eigentlich aus der garbage collected Welt stamme.
Folgendes Problem:
Ein Objekt einer Klasse hat eine map als Attribut. Ich möchte jetzt gerne eine Methode schreiben, die alle Values dieser map als Vector oder List zurückgibt. Das zu realisieren ist für mich kein Problem, aber mir gehts da um den Stil des Speichermanagements. Generell gilt ja die Regel, dass wer den Speicher erzeugt, ihn auch wieder freigeben soll.
Damit ergibt sich folgende 1. Idee: Wenn ich den Vector/List in der Methode erzeuge, muss es auf dem Heap landen. Wenn ich jetzt aber einfach einen Zeiger auf diesen Vector/List per Methode zurückgebe, weiß ich nicht, wann ich den Speicher wieder freigeben muss. Das könnte natürlich der Aufrufende meinem Objekt später signalisieren, aber das finde ich irgendwie unschön.
Die zweite Variante entspricht mehr dem Stil den ich aus der embedded Entwicklung bei fehlendem Heap kenne. Der Aufrufende reicht einen Zeiger auf eine Vector/List per Argument an die Methode, die dann diesen Container mit entsprechenden Kopien der map Values befüllt. Der Aufrufende kümmert sich dann später auch um das Freigeben des Speichers. Ist diese Variante gebräuchlich?
Die dritte Variante ist die Nutzung von smart pointers und da ich auch boost benutze, hätte ich sie sowieso da. Aber macht das an der Stelle Sinn oder ist das mit Kanonen auf Spatzen geschossen?
Vielen Dank schon mal!
Also ich programmiere nun seit langer Zeit mal wieder etwas mehr C++ und angesichts der Frage kann ich schon gleich sagen, dass ich eigentlich aus der garbage collected Welt stamme.
Folgendes Problem:
Ein Objekt einer Klasse hat eine map als Attribut. Ich möchte jetzt gerne eine Methode schreiben, die alle Values dieser map als Vector oder List zurückgibt. Das zu realisieren ist für mich kein Problem, aber mir gehts da um den Stil des Speichermanagements. Generell gilt ja die Regel, dass wer den Speicher erzeugt, ihn auch wieder freigeben soll.
Damit ergibt sich folgende 1. Idee: Wenn ich den Vector/List in der Methode erzeuge, muss es auf dem Heap landen. Wenn ich jetzt aber einfach einen Zeiger auf diesen Vector/List per Methode zurückgebe, weiß ich nicht, wann ich den Speicher wieder freigeben muss. Das könnte natürlich der Aufrufende meinem Objekt später signalisieren, aber das finde ich irgendwie unschön.
Die zweite Variante entspricht mehr dem Stil den ich aus der embedded Entwicklung bei fehlendem Heap kenne. Der Aufrufende reicht einen Zeiger auf eine Vector/List per Argument an die Methode, die dann diesen Container mit entsprechenden Kopien der map Values befüllt. Der Aufrufende kümmert sich dann später auch um das Freigeben des Speichers. Ist diese Variante gebräuchlich?
Die dritte Variante ist die Nutzung von smart pointers und da ich auch boost benutze, hätte ich sie sowieso da. Aber macht das an der Stelle Sinn oder ist das mit Kanonen auf Spatzen geschossen?
Vielen Dank schon mal!