AGB  ·  Datenschutz  ·  Impressum  







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

Eigener Destruktor

Ein Thema von ChrisM · begonnen am 31. Mär 2004 · letzter Beitrag vom 1. Apr 2004
Antwort Antwort
ChrisM

Registriert seit: 30. Mär 2004
Ort: Roetgen
5 Beiträge
 
Delphi 7 Personal
 
#1

Eigener Destruktor

  Alt 31. Mär 2004, 14:00
Hi.
Soweit ich weiß, heißt der Standard-Destruktor in Delphi Destroy, dass häufig verwendete Free ist eine einfache Procedure, welche Destroy aufruft, jedoch keine Speicherzugriffsverletzung hervorruft, wenn man sie mehrfach aufruft. Wenn ich jetzt in meiner Klasse einen eigenen Destruktor Destroy schreibe, wird dann beim aufrufen von Free automatisch mein eigener Destruktor verwendet? Sorry für die blöde Frage, aber bin noch Anfänger in Delphi.
Christopher M.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Eigener Destruktor

  Alt 31. Mär 2004, 14:32
Moin.

Wenn du den vorhandenen virtuell konstruktor mit override überschreibst, dann ist das der fall.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Eigener Destruktor

  Alt 31. Mär 2004, 16:34
Deine Vorstellung von Free ist falsch. Es ruft Destroy auf, aber ein Mehrfachaufruf wird nicht abgefangen.
Was (mit Hilfe von Compilermagie) abegefangen wird ist das bei a.Free der Aufruf unterbleibt falls a = nil ist.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Eigener Destruktor

  Alt 1. Apr 2004, 12:07
Zitat von Robert Marquardt:
Deine Vorstellung von Free ist falsch. Es ruft Destroy auf, aber ein Mehrfachaufruf wird nicht abgefangen.
Was (mit Hilfe von Compilermagie) abegefangen wird ist das bei a.Free der Aufruf unterbleibt falls a = nil ist.
Ich glaub eher deine vorstellung ist falsch

Was solld daran bitte magie sein? :
Delphi-Quellcode:
procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;
Wie soll der compiler auch wissen wann a = nil ist? er optimiert vielleicht unsinnige aufrufe, aber sonst auch nix! Self = a da self der unsichtbare data-pointer ist. Also macht es keinen unterschied ob ich
a.free; schreibe, oder ob ich
if a<>nil then a.destroy; mache!

Zitat:
Es ruft Destroy auf, aber ein Mehrfachaufruf wird nicht abgefangen.
Mehrfach nicht, aber da destroy virtuell ist in gewisser weise schon
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Antwort Antwort


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