![]() |
Eigener Destruktor
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. |
Re: Eigener Destruktor
Moin.
Wenn du den vorhandenen virtuell konstruktor mit override überschreibst, dann ist das der fall. |
Re: Eigener Destruktor
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. |
Re: Eigener Destruktor
Zitat:
Was solld daran bitte magie sein? :
Delphi-Quellcode:
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
procedure TObject.Free;
begin if Self <> nil then Destroy; end;
Delphi-Quellcode:
schreibe, oder ob ich
a.free;
Delphi-Quellcode:
mache!
if a<>nil then a.destroy;
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 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