AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Behandlung von Exceptions innerhalb von Konstruktoren
Thema durchsuchen
Ansicht
Themen-Optionen

Behandlung von Exceptions innerhalb von Konstruktoren

Ein Thema von MatthiasR · begonnen am 17. Sep 2007 · letzter Beitrag vom 18. Sep 2007
 
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#1

Behandlung von Exceptions innerhalb von Konstruktoren

  Alt 17. Sep 2007, 15:45
Hallo allerseits,

ich habe mir schon oft die Frage gestellt, wie man eigentlich korrekterweise mit Exceptions innerhalb von Konstruktoren selbstgeschriebener Klassen umgeht. Als Beispiel habe ich mal ein kleines Mini-Programm entworfen mit einer selbstdefinierten Klasse (von TObject abgeleitet) und einem eigenen Konstruktor, in der nichts weiter gemacht wird, als eine Exception ausgelöst. Aber schaut es euch selber an:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  TMyClass = class(TObject)
  private
  public
    constructor Create(bCreateException: Boolean);
end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TMyClass }

constructor TMyClass.Create(bCreateException: Boolean);
begin
  inherited Create;
  if bCreateException then
    raise Exception.Create('Test');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyObject : TMyClass;
begin
  try
    MyObject := TMyClass.Create(True);
  except
    if Assigned(MyObject) then
      FreeAndNil(MyObject);
  end;
end;
In der ButtonClick-Routine wird ein Objekt der Klasse TMyClass erzeugt, in deren Konstruktor bereits eine Exception auftritt.

Nun meine Frage: Wird durch das "inherited Create" innerhalb des Konstruktors bereits Speicher allokiert (ja oder?) und wie gebe ich den dann anschließend frei??? Die Funktion "Assigned(MyObject)" liefert True zurück, das FreeAnNil anschließend erzeugt jedoch eine Speicherzugriffsverletzung.

Oder sind Exceptions innerhalb von Konstruktoren so ein typischen Unding, was man nie nie nie nie [...] nie nie niemals bei Delphi machen sollte ?

Vielen Dank im Voraus für die Hilfe!
  Mit Zitat antworten Zitat
 


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 01:42 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