![]() |
Re: Komponeten zerstören
@LoL
ich möchte hier nicht den Experten vorgreifen, aber ich glaube es eher weniger. |
Re: Komponeten zerstören
@ Christian Seehase: Ich mich :oops:
|
Re: Komponeten zerstören
Moin Christoph,
Zitat:
[EDIT] Zitat:
[/EDIT] |
Re: Komponeten zerstören
freeandnil macht das:
Delphi-Quellcode:
hab ich probiert geht aber irgendwie nicht. die abfrage gibt immer noch false zurück
procedure FreeAndNil(var Obj);
var Temp: TObject; begin Temp := TObject(Obj); Pointer(Obj) := nil; Temp.Free; end;´ |
Re: Komponeten zerstören
ich nehm an, FreeAndNil benötigt in seiner Parameterliste aber immer eine Instanz deren Typ ursprünglich ist und nicht eine deren Typ durch eine Übergabe via Parameterliste erst noch quasi 'falsch' ge-typcastet wurde.
|
Re: Komponeten zerstören
Also: Ich nehm an, Beispielpanel ist vom Typ TPanel.
Dann sollte folgender Aufruf funktionieren:
Delphi-Quellcode:
destroy_components(TComponent(Beispielpanel));
|
Re: Komponeten zerstören
nein eigentlich gerade nicht. Ich formuliere dann, dass das Teil vom Typ TComponent wäre, FreeAndNil muss aber den Destructor von TPanel aufrufen. Ich weiß nicht ob die Routine das dann trotzdem noch so ohne weiteres kann.
|
Re: Komponeten zerstören
No prob. Das ist ja das schöne von Klassen: Eine Objektvariable ist ja nur ein Zeiger auf das Objekt. Durch den Cast des Panels in TComponent kann man zwar nur noch auf die Eigenschaften und Methoden von TComponent zugreifen, der Inhalt bleibt aber der gleiche. Es wird weiterhin der Destruktur von TPanel aufgerufen.
|
Re: Komponeten zerstören
Bist du sicher, also dass nach einem falschen Typcasting per Übergabe via Parameterliste immer noch der korrekte Destructor aufgerufen wird? Wo doch die typisierte Instanz-Variable auch sonst immer den Typ des gepointeten quasi entscheident bestimmt. Du sagst ja selbst, dass man dann nur noch auf die Eigenschaften und Methoden von TComponent zugreifen kann. Der Destructor ist aber prinzipiell auch nur eine dieser Methoden. Also ich glaub's eher nicht so richtig... Aber ich muss auch zugeben, 1000% weiß ich es hier auch nicht *g*.
edit: Und meines Wissens sind solche Destructoren auch nicht so eine Abart von diesen virtuellen Methoden, die ja irgendwie so eine ähnliche Fähigkeit besitzen. |
Re: Komponeten zerstören
Du castest ja nur den Pointer, nicht den Inhalt! Welche Methode aufgerufen wird, bestimmt der Typ zur Laufzeit, nicht der im Quelltext angegebene!
Probiers mal selber aus:
Delphi-Quellcode:
type
TMyObject = class public destructor Destroy; override; end; destructor TMyObject.Destroy; begin ShowMessage('Ich werde ausgeführt'); end; var Obj: TObject; begin Obj := TMyObject.Create; Obj.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz