Allgemeine Designfrage Objektübergabe
-
Folgende Vorgehensweise sollte kein Problem ergeben oder:
... void main() { ClassA *classA = new ClassA(); ClassB *classB = new ClassB(classA); ... } ClassB { public: ClassB(ClassA *classA); ~ClassB(); private: ClassA *classA; } ClassB::ClassB(ClassA *classA) { this->classA = classA; }Sollte so funktionieren, oder ? (beim Copy-Konstruktor wird ja jedesmal neuer Speicher angelegt was ich vermeiden möchte)
Danke für Tipps bzw. Verbesserungsvorschläge!
MfG leon22
-
du machst halt eine flache kopie, aber was ist jetzt deine frage `?
-
Den Wert einer Variable in einer Membervariable abzulegen bezeichnet man normalerweise nicht als "flache Kopie"...

-
Ist das nicht relativ egal in diesem Fall, da ja nicht das Objekt selbst sondern nur ein Zeiger übergeben wird? Würde es noch was bringen das über eine Initialisierungsliste zu tun?
-
Also normalerweise sollte man über die Initialisierungsliste initialisieren.
Ich würde eventuell noch für den Parameter einen anderen Namen nehmen zum Beispiel ein Unterstrich vorne dran oder so, find ich sieht übersichtlicher aus, denn dann kannst dir auch das this-> sparen.Lg freeG
-
Und wem gehört jetzt classA, d.h. wer ist für das Löschen zuständig?
-
Athar schrieb:
Und wem gehört jetzt classA, d.h. wer ist für das Löschen zuständig?
Das ist reine Definitionssache. Üblicherweise ist in dem Fall aber die main Funktion dafür verantwortlich, weil ihn ihrem aktuellen Scope auch bereits die Allokation statt gefunden hat. Wenn ClassB z.B explizit ein solches dynamisch angefordertes Objekt erwartet und sagt, dass es den selbst frei gibt, dann ist das auch Ok. In der Tat wird das sehr oft gemacht. Z.b bei Smart Pointern.
-
drakon schrieb:
Wenn ClassB z.B explizit ein solches dynamisch angefordertes Objekt erwartet und sagt, dass es den selbst frei gibt, dann ist das auch Ok. In der Tat wird das sehr oft gemacht. Z.b bei Smart Pointern.
Und auch in einigen Libraries die vor dem Modern-Werden von Smart-Pointern entworfen wurden. Als Beispiel fällt mir die Crypto++ ein. Und wenn ich mich nicht irre machen das auch diverse Windowing-Toolkits so.
-
hustbaer schrieb:
Den Wert einer Variable in einer Membervariable abzulegen bezeichnet man normalerweise nicht als "flache Kopie"...

hups sorry, CTor nicht gelesen