AGB  ·  Datenschutz  ·  Impressum  







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

Instanz sich selber zerstören lassen?

Ein Thema von Minz · begonnen am 19. Nov 2003 · letzter Beitrag vom 19. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#1

Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 11:14
Hallösche,

ist es möglich, dass sich eine Instanz einer Klasse selber zerstört?

Also ich erstelle sie mit create(nil).

Gruß Minz
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 11:18
Ja.. -> Self.Free;
Manuel Pöter
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#3

Re: Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 11:19
lol, danke !
  Mit Zitat antworten Zitat
Rumpi

Registriert seit: 26. Aug 2003
Ort: Berlin
72 Beiträge
 
#4

Re: Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 11:59
Hi,

oder auch mit
FreeAndNil( Self ); Worauf du aber immer achten solltest ist:
Delphi-Quellcode:
  XYZ = class
    ...
  destructor Destroy; override; // override nicht vergessen
  
  end;

....

destructor XYZ.Destroy;
begin
  // sauber machen nicht vergessen
  inherited; // Parent destructor
end;
sonnst wird bei Free oder FreeAndNil
nur der Default Parent Destructor gerufen und
nicht der in deiner Klasse XYZ und der
reservierte Speicher in XYZ wird nicht freigegeben!


mfg Rumpi
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 12:32
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 13:12
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;
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 13:16
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 13:41
Hallo,

Du hast wahrscheinlich das kleine Wörtchen class übersehen.
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:
  TIrgendwas.Machwas; also immer mit dem "T" davor.
Hab' ich schon in zahlreichen Projekten so gemacht. Eignet sich vor allem bei Formularen.
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
OLLI_T

Registriert seit: 13. Okt 2003
Ort: Nähe Wetzlar / Hessen
143 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 13:47
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:
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;
Vielleicht kann der Eine oder Andere was damit anfangen!?

Gruss

OLLI
No Pain No Gain!
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#10

Re: Instanz sich selber zerstören lassen?

  Alt 19. Nov 2003, 13:57
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:49 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