AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fragen zu Generic TList

Ein Thema von norwegen60 · begonnen am 25. Jan 2017 · letzter Beitrag vom 26. Jan 2017
Antwort Antwort
Seite 2 von 2     12   
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Fragen zu Generic TList

  Alt 26. Jan 2017, 10:19
Ich hatte die Signatur noch mal geändert, (war nur so aus dem Kopf),
mit der aktuellen Signatur sollte es gehen siehe oben
Fritz Westermann
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#12

AW: Fragen zu Generic TList

  Alt 26. Jan 2017, 11:32
Noch mal 1mm weiter aber immer noch nicht am Ziel.

Jetzt streikt der Aufruf
Delphi-Quellcode:
procedure TMyList.Notify(const Ptr: TMyclass; Action: TCollectionNotification); // Überschreiben nicht virtual
begin
  if (FFreeOnDelete) and (Ptr<>nil) and (Action = cnRemoved) then
    Ptr.Free; // Ungültige Zeigeroperation
  inherited Notify(Ptr, Action);
end;
Beim Aufruf von Ptr.Free kommt es zu einer Exception "Ungültige Zeigeroperation". Dispose(Ptr) ging auch nicht.

Ausserdem:
Ich bin dr Meinung, dass inherited nach meiner Aktion erfolgen soll aber auf der Suche fan ich auch Beispiele, wo zuerst inherited aufgerufen wurde. Spielt es eine Rolle?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Fragen zu Generic TList

  Alt 26. Jan 2017, 11:38
.. nur mal ein Schuss ins Blaue - an dem const Parameter kann es nicht liegen?

oder Ptr ist bereits woanders freigegeben und nicht auf nil gesetzt worden .

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#14

AW: Fragen zu Generic TList

  Alt 26. Jan 2017, 11:54
Hallöle...
Delphi-Quellcode:
procedure TMyList.Notify(const Ptr: TMyclass; Action: TCollectionNotification); // Überschreiben nicht virtual
begin
  if (FFreeOnDelete) and (Ptr<>nil) and (Action = cnRemoved) then
    Ptr.Free; // Ungültige Zeigeroperation
  inherited Notify(Ptr, Action);
end;
..du gibst immer noch den Pointer frei der in der Gesamtliste beibehalten werden soll. Die Liste muß dich über nix in informieren... (Notify kann weg) Einfach den Listen Eintrag mit DELETE entfernen...fertsch. Die Instanzen der Hauptliste werden mit der TObjectList, wenn du endlich mal eine hast, weggeräumt.

Zitat:
und ich noch nicht abschätzen kann welche Auswirkungen ein Wechsel auf TObjectList hat.
Es gibt keine Auswirkungen. Der Unterschied von TObjectList und TList besteht darin das die TObjectList ihre enthaltenen Instanzen wegräumt.

Geändert von haentschman (26. Jan 2017 um 12:00 Uhr)
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#15

AW: Fragen zu Generic TList

  Alt 26. Jan 2017, 14:33
Zitat:
.. nur mal ein Schuss ins Blaue - an dem const Parameter kann es nicht liegen?
Den Schuss hatte ich auch schon probiert. Wenn ich CONST entferne meckert er wieder, dass sich die Definition von der vorherigen Unterscheidet. Und dass der Ptr <> nil ist habe ich ja abgesichert.

Zitat:
Die Instanzen der Hauptliste werden mit der TObjectList, wenn du endlich mal eine hast, weggeräumt.
Eigentlich wollte ich doch nur rausbekommen wie das mit dem Notify funktioniert nachdem in der Hilfe doch steht
Zitat:
Hinweis: Der für das Element reservierte Speicherplatz wird von Delete nicht freigegeben. Das Objekt kann freigegeben werden, indem die Methode Notify überschrieben wird.
Und warum raten sie in http://www.delphipraxis.net/190843-t...terschied.html zu TList beim arbeiten mit Klassen? Wenn OwnObjects wirklich der einzige Unterschied ist, sollte es doch egal sein.

Geändert von norwegen60 (26. Jan 2017 um 14:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#16

AW: Fragen zu Generic TList

  Alt 26. Jan 2017, 17:24
Hallöle...
Zitat:
Und warum raten sie in http://www.delphipraxis.net/190843-t...terschied.html zu TList beim arbeiten mit Klassen? Wenn OwnObjects wirklich der einzige Unterschied ist, sollte es doch egal sein.
Das OwnObjects ist der einzige Unterschied...aber der macht das. Im Anhang ein Projekt wo die Speicherlecks angezeigt werden...einmal TList und einmal TObjectList (siehe Quelltext anzeigen)
Zitat:
TObjectList ist nichts weiter als eine Unterklasse von TList. Das einzige was sie zusätzlich macht ist das Freigeben der enthaltenen Objekte wenn OwnsObjects == True ist.
...dazu gibt es nichts mehr zu sagen.
Zitat:
Eigentlich wollte ich doch nur rausbekommen wie das mit dem Notify funktioniert nachdem in der Hilfe doch steht
Das Notify ist dafür da, das die "Logik" über Änderungen an der Liste informiert wird um weitere Aktionen auszulösen. Dazu gehört nicht die Freigabe der Listeneinträge. Da macht die Liste selbst ohne eine zusätzliche Zeile (TObjectList)

Hinweis:
Zitat:
raten sie
...auch wenn wir Ü(irgendwas) sind sind wir beim du...Respekt vorausgesetzt.
Angehängte Dateien
Dateityp: zip ListTest.zip (52,1 KB, 7x aufgerufen)

Geändert von haentschman (26. Jan 2017 um 17:28 Uhr)
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#17

AW: Fragen zu Generic TList

  Alt 26. Jan 2017, 19:15
Hallo,

Zitat:
...auch wenn wir Ü(irgendwas) sind sind wir beim du...Respekt vorausgesetzt.
warst nicht du gemeint sondern die anderen in dem erwähnten Thread.

Weil ich es eben so verstanden hatte, dass TObjectList nur das zusätzlich Löschen hat, habe ich nicht verstanden warum dann in dem andern Thread zu TList geraten wird.

In meinem Projekt habe ich schon auf TObjektList umgestellt. Dein Leckanzeiger werde ich gleich mal ausprobieren
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz