Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Ein Object in mehreren Listen (https://www.delphipraxis.net/160527-ein-object-mehreren-listen.html)

MondiBob 17. Mai 2011 20:27

Delphi-Version: 2010

Ein Object in mehreren Listen
 
Hallo erst mal,

wie der Titel schon sagt, möchte ich ein Object in verschiedenen Listen verwalten. Wie das Beispiel zeigt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  list1.Add(TObject.Create);
  list2.Add(list1.Last);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  list1 := TObjectList.Create;
  list2 := TObjectList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  list1.Free;
  list2.Free;
end;
Solange ich kein Object erzeuge gibt es natürlich kein Problem, sobald aber mindestens ein neues Object erstellt wurde gibt es einen Fehler, sobald das Programm geschlossen wird. Ist ja eigentlich auch logisch, da ich das gleiche Object 2mal freigeben möchte.

Wie kann ich also diese Problem umgehen?

Gruß MondiBob

mkinzler 17. Mai 2011 20:29

AW: Ein Object in mehreren Listen
 
Es darf nur eine Liste die Objekte besitzen (.OwnsObjects)

MondiBob 17. Mai 2011 21:23

AW: Ein Object in mehreren Listen
 
Vielen Dank, funktioniert perfekt :)

FredlFesl 18. Mai 2011 06:40

AW: Ein Object in mehreren Listen
 
Kann man den Destruktor eigentlich irgendwie abbrechen?
Also sowas wie:

Delphi-Quellcode:
Destruktor TMyObject.Destroy;
Begin
  Dec (fRefCount);
  if fRefCount>0 Then Abort;
End;
Klar, SOO natürlich nicht. Aber irgendwie anders?

DeddyH 18. Mai 2011 07:06

AW: Ein Object in mehreren Listen
 
Ich habe das zwar noch nie versucht bzw. gebraucht, aber möglicherweise so:
Delphi-Quellcode:
destructor TDings.Destroy;
begin
  if AllesOK then
    begin
      MachSauber;
      inherited;
    end;
end;
Nur: wozu soll das gut sein, wenn ich Free aufrufe, gehe ich davon aus, dass das Objekt danach auch garantiert freigegeben ist.

rollstuhlfahrer 18. Mai 2011 08:51

AW: Ein Object in mehreren Listen
 
Dazu müsstest du dir eine eigene Methode schreiben, die dann .Free aufruft. Der Destructor zerstört im Normalfall auch das Objekt, wenn kein inherited aufgerufen wird. Also das Objekt ist dann wirklich weg.

Bernhard

himitsu 18. Mai 2011 08:56

AW: Ein Object in mehreren Listen
 
Bezüglich dem Destroy ... schaut euch mal ein Singleton-Pattern an.

Namenloser 18. Mai 2011 11:12

AW: Ein Object in mehreren Listen
 
Zitat:

Zitat von FredlFesl (Beitrag 1101460)
Kann man den Destruktor eigentlich irgendwie abbrechen?
Also sowas wie:

Delphi-Quellcode:
Destruktor TMyObject.Destroy;
Begin
  Dec (fRefCount);
  if fRefCount>0 Then Abort;
End;
Klar, SOO natürlich nicht. Aber irgendwie anders?

Kann man sicher irgendwie hinfrickeln, würde ich aber nicht empfehlen. Du könntest aber statt Objekten Interfaces nehmen, die haben eine Referenzzählung.


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