Hey,
was ist die eleganteste Weise ein Objekt zurückzugeben?
Ich habe versucht das ganze über Referenzen zu machen, aber krieg die ganze Zeit Heap/Pointer-Fehler, da das Objekt außerhalb des Scopes ist.
Kleines Beispiel wie ich es bisher gemacht habe:
class KlasseA {
private:
KlasseB *objekt;
public:
KlasseB& getObjekt(){
return *this->objekt;}
};
Alles anzeigen
Das funktioniert nicht, weil der Pointer auf objekt ja gelöscht wird (wenn z.B. das komplette KlasseA-Objekt gelöscht wird)
Nach ein wenig rumgooglerei hab ich ein paar andere Konzepte gefunden..
1.) per static zurückgeben.. also ein statisches Objekt in getObjekt() erstellen und das dann zurückgeben.
Will ich ungern machen, weil sich das relativ unsauber anfühlt irgendwelche statischen Objekte in einer Funktion zu erstellen, die dann die ganze Zeit im Speicher rumschwirren.
2) per new ein Objekt erstellen. Also innerhalb von getObjekt per new ein Objekt erstellen. Will ich aber auch nicht machen, weil ich im Verlauf der Programmierung mit Sicherheit vergessen werde, dass immer wenn ich KlasseB *ptr = getObjekt() aufrufe ich immer ptr löschen muss. Da ich ansonsten so gut wie nie mit new/delete arbeite.
3) Referenz auf das Objekt als Parameter mitübergeben. So mache ich das aktuell auch:
class KlasseA {
private:
KlasseB *objekt;
public:
void getObjekt(KlasseB& inputObjekt){
inputObjekt = *objekt;}
};
Aber es muss doch irgendwie möglich sein einfach ein normales Objekt zurückzugeben ala
KlasseB objekt = KlasseA.getObjekt();
über ein Kopierkonstruktor oder sowas. Ich möchte nicht auf das Objekt mit dem identischen Speicherbereich aus KlasseA zugreifen, ich möchte einfach nur eine flache Kopie von dem objekt aus KlasseA in mein objekt in der main-methode haben..