Autor |
Beitrag |
rushifell
Beiträge: 306
Erhaltene Danke: 14
|
Verfasst: Mi 18.04.18 17:56
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 18.04.18 18:30
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: rushifell, Symbroson
|
|
rushifell
Beiträge: 306
Erhaltene Danke: 14
|
Verfasst: Do 19.04.18 06:12
Vielen Dank, auch für den Tipp mit ReportMemoryLeaksOnShutdown. Das wusste ich nicht.
In Lazarus gibt's das nicht, man kann aber die heaptrc-Unit einbinden:
Unter "Projekt - Projekteinstellungen" im Bereich Compilereinstellungen auf Debuggen und dann "heaptrc-Unit verwenden (-gh)" aktivieren.
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 19.04.18 09:58
Frühlingsrolle hat folgendes geschrieben : | Wenn du etwas über den Konstruktor nicht erzeugt hast, dann hast du auch nichts zum freigeben. |
Nun ja, was in Fall 1 passiert ist ja, dass ein Zeiger auf den String zurückgeliefert wird. Dieser Zeiger wird dann in die Liste gepackt. Sauber ist das nicht...
Ich würde generell empfehlen nicht solche Hacks zu verwenden. Neben with ist so etwas die häufigste Ursache für Fehler beim Kompilieren mit einer neueren Version von Delphi oder schwer zu findende Bugs. Wenn man das sauber umsetzt, hat man später viel weniger Probleme.
Für professionelle Entwicklung zumindest ist so etwas ein No-Go. Privat muss das jeder selbst entscheiden.
Für diesen Beitrag haben gedankt: Narses
|
|
rushifell
Beiträge: 306
Erhaltene Danke: 14
|
Verfasst: Do 19.04.18 12:20
Nein, das will ich eben nicht, und deshalb stelle ich hier meine Frage. Dass es funktioniert, weiss ich ja. Mit Data von Listview habe ich auch ein ungutes Gefühl. Ich glaube, das einzige, was wirklich unproblematisch ist, ist das dritte Beispiel mit Addobject. Wie mache ich es besser, eine Klasse erstellen, in der der String gespeichert wird?
"With" benutze ich übrigens nie in meinem eigenen Quellcode, das war nur Faulheit. Copy und Paste geht am Smartphone leichter, als selbst tippen.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 19.04.18 14:17
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 20.04.18 08:28
Frühlingsrolle hat folgendes geschrieben : | Die Daten können zuvor in einer TStringList, TList, TObjectList, ... aufbereitet, und an jenes Steuerelement übergeben werden. |
Genau, und als Referenz kann man dann den Index einer Liste oder ein echtes Objekt an die Controls hängen. Beides ist unproblematisch, weil die Daten an sich dann ja nicht am Control hängend verwaltet werden.
Frühlingsrolle hat folgendes geschrieben : | Hinter der with-Anweisung steckt nichts böses. Es verhält sich wie ein scharfes Küchenmesser, oder wie ein Kraftfahrzeug mit explosiven Treibstoff - unter falscher Handhabung kann es böse enden, ansonsten nicht. |
Eben nicht. Auch bei vollkommen richtiger Anwendung kann es passieren, dass es nach einem Delphi-Upgrade Kompilierfehler gibt. Und dann muss man erst schauen was eine Eigenschaft des with-Objekts war und was eine äußere Eigenschaft, so dass man dann unnötig Zeit und Nerven verliert.
Im schlechtesten Fall gibt es gar keinen Fehler beim Kompilieren, aber es wird stillschweigend eine neu eingeführte gleichnamige Property des with-Objekts benutzt.
Da sind auch sehr viele drauf reingefallen als z.B. TRect um ich glaube Width und Height erweitert wurde.... so auch in der Virtual String Tree. Die hätte ohne das with problemlos mit neueren Versionen kompiliert damals.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 20.04.18 10:54
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
jasocul
Beiträge: 6388
Erhaltene Danke: 146
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 20.04.18 11:25
Frühlingsrolle hat folgendes geschrieben : | Überwiegend funktioniert die with-Anweisung so wie sie soll. |
Auf Überwiegend würde ich mich lieber nicht verlassen. Aber manche lieben das Risiko
|
|