Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Object aus TObjectList soll sich selbst freigeben, trotz OwnObjects (https://www.delphipraxis.net/184212-object-aus-tobjectlist-soll-sich-selbst-freigeben-trotz-ownobjects.html)

Captnemo 9. Mär 2015 13:07

Object aus TObjectList soll sich selbst freigeben, trotz OwnObjects
 
Hi,

ich habe eine TObjectList, mit mehreren Objects. Die TObjectList ist per Default auf OwnObjects gesetzt, was auch so bleiben soll.

Jetzt möchte ich aber bei einigen Objekten, dass diese sich in bestimmten Situationen selber freigeben, was auch funktioniert.
Aber sie müssten auch aus der TObjectList entfernt werden. Logischerweise knallt es beim Clear oder Free, weil die TObjectList beim Aufräumen Objekte entfernen will, die gar nicht mehr da sind.

Gibt es dafür eine einfache, elegante Lösung?

Wenn nicht, dann muss ich das anders lösen. Wär nur für mich einfacher, wenn es irgendwie ginge.
(Während ich das hier schreibe, beschleicht mich das Gefühl, dass das ein blöde Frage ist ;) )

Bernhard Geyer 9. Mär 2015 13:12

AW: Object aus TObjectList soll sich selbst freigeben, trotz OwnObjects
 
Du muss einfach das Notification-Pattern das auch die VCL tausendfach verwendet implementieren.

BUG 9. Mär 2015 13:15

AW: Object aus TObjectList soll sich selbst freigeben, trotz OwnObjects
 
Also noch einmal anders formuliert: Das Objekt muss sich bei seinem Owner vorher abmelden.

Captnemo 9. Mär 2015 13:17

AW: Object aus TObjectList soll sich selbst freigeben, trotz OwnObjects
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1292795)
Notification-Pattern

Hm...klingt interessant. Wenn du mir das noch ein klein wenig besser erläutern könntest, dann könnte ich das mal versuchen.

himitsu 9. Mär 2015 13:20

AW: Object aus TObjectList soll sich selbst freigeben, trotz OwnObjects
 
Das Objekt löscht sich nicht selbst, sondern ruft TList.Delete auf
oder es ruft TList.Extract auf, bevor es sich löscht.

Und wenn es alles TComponent sind TComponent.FreeNotification . [edit] das Notification-Pattern :zwinker:
http://geheimniswelten.de/artikel/tc...t-auto-remove/

[edit]
TComponentList<T>.TNotify.Notification sieht grad irgendwie komisch aus ... ich glaub da hab ich die falsche Version hochgeladen. :shock:
Ich glaub das muß
Delphi-Quellcode:
if (Operation = opRemove) and not Contains(AComponent) then
lauten.

Delphi-Quellcode:
if Operation = opRemove then
  while FParent.Extract(AComponent) <> nil do ;

Captnemo 9. Mär 2015 13:29

AW: Object aus TObjectList soll sich selbst freigeben, trotz OwnObjects
 
Ich habe aber keine Components sondern schnöde TObject's. Ich weiß nicht so wirklich, wie ich an die entsprechende TObjectList rankomme (wobei es ja mehr als eine geben könnte). Deswegen hört sich das mit Notification interessant an, hab ich aber noch nicht kapiert,

himitsu 9. Mär 2015 13:32

AW: Object aus TObjectList soll sich selbst freigeben, trotz OwnObjects
 
Dann mußt du das eben selber implementieren.
* deine Objekte müssen die Liste kennen (ihren Owner)
* und im Destructor müssen sie sich selber aus der Liste entfernen (Extract)

Bei TComponent kann man die Registrierungsfunktionen der VCL benutzen
und wenn nicht dann muß man selber was implementieren.

Captnemo 9. Mär 2015 13:44

AW: Object aus TObjectList soll sich selbst freigeben, trotz OwnObjects
 
Okay, danke.

Ich habe es jetzt so gelöst, in dem ich halt einfach eine Methode der ObjectList aufrufen, die ihrerseits dann die Methode von Object aufruft, und es nach Erfolg auch selber freigibt.

Danke euch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 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