Einzelnen Beitrag anzeigen

CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Probleme mit Objektkopie und eigenem MessageDialog

  Alt 20. Dez 2018, 16:58
Entschuldigung dass ich den Pfeil auf den Dialog-Konstruktor im Screenshot dann falsch verstanden habe

Re: Objekt-Kopie: dafür gibt es doch TPersistent. Ich kann mir gerade schwer vorstellen, dass ein generischer Kopiermechanismus immer alles richtig macht. Beispiel Feld vom Typ TStringList. Kopiert das generische ObjectCopy dabei dann den Inhalt, oder nur den Zeiger?
1. Wenn das kopierte Objekt sein Objekt vom Typ TStringList selber initialisiert und finalisiert, würde ein Kopieren des Zeigers zu Problemen führen, weil dann zwei Objekte im destructor Free auf das gleiche TStringList-Feld ausführen, das zweite führt dann zwangsweise zu einem Problem.
2. Alternativ kann das ObjectCopy Inhalte kopieren, aber was ist mit einem property vom Typ TStringList (oder komplexerer Klasse), das von außen dem Objekt zugewiesen wird? Dort würde das kopierte Objekt dann nur mit einer Kopie arbeiten, wo evtl. die Arbeit am Original gewünscht ist.

In beiden Fällen kann ich mir Szenarios mit Zugriffsverletzungen auf Adresse 00000000 vorstellen. Daher halte ich ein Erben von TPersistent mit selbstdefiniertem Assign für deutlich zuverlässigere Lösung. Ist mehr Aufwand, dafür hat man wirklich in der Hand, dass die Kopie so wird, wie man will.

(evlt. noch übertriebener ausgedrückt, weil ich nicht weiß ob ich mich anschaulich ausgedrückt habe: wenn das Objekt ein Property vom Typ TCustomForm hat, das auf die MainForm verweist - soll dann beim Klonen eine zweite Kopie vom Hauptformular angelegt werden? Aber wenn nur der Zeiger kopiert wird, woher weiß das ObjectClone, dass es sich nicht um eine Form handelt, die im destructor aufgelöst wird, weil sie auch im constructor erstellt wurde?)
)

Geändert von CCRDude (20. Dez 2018 um 17:01 Uhr)
  Mit Zitat antworten Zitat