![]() |
Instanz sich selber zerstören lassen?
Hallösche,
ist es möglich, dass sich eine Instanz einer Klasse selber zerstört? Also ich erstelle sie mit create(nil). Gruß Minz |
Re: Instanz sich selber zerstören lassen?
Ja.. -> Self.Free;
|
Re: Instanz sich selber zerstören lassen?
lol, danke ! :wall:
|
Re: Instanz sich selber zerstören lassen?
Hi,
oder auch mit
Delphi-Quellcode:
Worauf du aber immer achten solltest ist:
FreeAndNil( Self );
Delphi-Quellcode:
sonnst wird bei Free oder FreeAndNil
XYZ = class
... destructor Destroy; override; // override nicht vergessen end; .... destructor XYZ.Destroy; begin // sauber machen nicht vergessen inherited; // Parent destructor end; nur der Default Parent Destructor gerufen und nicht der in deiner Klasse XYZ und der reservierte Speicher in XYZ wird nicht freigegeben! mfg Rumpi |
Re: Instanz sich selber zerstören lassen?
haben wir nicht schon vor paar wochen festgestellt das selbst zerstören nicht geht da man sich in einer Methode befindet von dem Object was zerstört werden soll und da kommt dann so weit ich mich erinnere ein Abstract Error
|
Re: Instanz sich selber zerstören lassen?
Hallo,
mit einer class procedure sollte es auf jeden Fall funktionieren:
Delphi-Quellcode:
class procedure TIrgendwas.Machwas;
begin with Create(nil) do try MachDasEine; MachDasAndere; finally Free; end; end; |
Re: Instanz sich selber zerstören lassen?
als ich das mal probiert hab kams zu einem fehler weil man sich ja noch in der instanz von TIrgendwas.Machwas befindet während die instanz zerstört wird
|
Re: Instanz sich selber zerstören lassen?
Hallo,
Du hast wahrscheinlich das kleine Wörtchen
Delphi-Quellcode:
übersehen.
class
Das bedeutet, dass die Methode wie man in C sagen würde statisch ist. Sie "hängt" an der Klasse und nicht an der Instanz, daher kann hier problemlos die Instanz freigegeben werden. Zu beachten ist allerdings der Aufruf:
Delphi-Quellcode:
also immer mit dem "T" davor.
TIrgendwas.Machwas;
Hab' ich schon in zahlreichen Projekten so gemacht. Eignet sich vor allem bei Formularen. |
Re: Instanz sich selber zerstören lassen?
Kleiner Tipp am Rande.
Ich hab "damals" ne kleinen ComponentEditor gebastelt, mit dem man verhindern kann, dass mehr als eine Instanz einer Komponente ins Projekt geworfen werden können. Hier ein Auszug aus der Registrierungs-Unit:
Delphi-Quellcode:
Vielleicht kann der Eine oder Andere was damit anfangen!?
uses
DsgnIntf, SysUtils, TypInfo, Classes, Dialogs System32; Type TStopEditor = class(TComponentEditor) private { Private-Deklarationen } FRemove:Boolean; public constructor Create(AComponent: TComponent; ADesigner: IFormDesigner); override; Procedure GetCompNames(const S: string); End; Procedure Register; implementation uses PicSel; Procedure Register; Begin .... RegisterComponentEditor(TotStopWatch32,TStopEditor); .... End; ..... // ************************************************************************** // ** TStopEditor *********************************************************** // ************************************************************************** constructor TStopEditor.Create(AComponent: TComponent; ADesigner: IFormDesigner); Var TD:TTypeData; begin inherited; If AComponent.Owner<>NIL Then Begin TD.ClassType:=TotStopWatch32; ADesigner.GetComponentNames(@TD,GetCompNames); If FRemove Then Begin ADesigner.DeleteSelection; Component.Owner.RemoveComponent(Component); End; End; end; Procedure TStopEditor.GetCompNames(const S: string); Begin If S<>Component.Name Then Begin Showmessage('Es ist bereits eine Stopwatch im Projekt!'); FRemove:=TRUE; End; end; Gruss OLLI |
Re: Instanz sich selber zerstören lassen?
versteh ich net so ganz!
Programm Instanz:=MeineKlasse.create(nil); Instanz.machwas; MeineKlasse class procedure machwas; ... free; so in etwa? ach ähm @Olli ich kann da keinen Zusammenhang mit diesem Thema entdecken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 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-2025 by Thomas Breitkreuz