![]() |
Delphi-Version: XE3
TXMLDocument freigeben
Hi,
folgender Code:
Delphi-Quellcode:
Kann ich hierbei auch auf das finalisiernde Doc := nil; zur Freigabe verzichten? Dephi gibt hierbei den Hinweis:
var
RootNode: IXMLNode; Doc: TXMLDocument; begin // Erzeuge ein Dokument Doc := TXMLDocument.Create(nil); try Doc.Active := True; // Root Node Doc.AddChild('DynamicUserForm'); // Parent node RootNode := Doc.DocumentElement; (... Dinge tun ...) Doc.SaveToXML(Result); Doc.Active := False; finally Doc := nil; end; end;
Delphi-Quellcode:
[dcc32 Hinweis] xxx.pas(760): H2077 Auf 'Doc' zugewiesener Wert wird niemals benutzt
Viele Grüße, Martin |
AW: TXMLDocument freigeben
Ich habe vielleicht etwas übersehen, aber sollte Doc nicht als IXMLDocument deklariert sein? Und eigentlich gehört das Create ja vor das try.
|
AW: TXMLDocument freigeben
Zitat:
Zitat:
|
AW: TXMLDocument freigeben
Objekte gibt man frei, indem man deren Free-Methode aufruft, Interfaces, indem man sie auf nil setzt (sofern es sich um die einzige/letzte Referenz handelt). Da Du die Variable als Instanz- und nicht als Interfacevariable deklariert hast, bringt das Setzen auf nil nichts, da hat der Compiler schon Recht.
|
AW: TXMLDocument freigeben
Oh, ja, klar, das war ein Flüchtigkeitsfehler, absolut korrekt. :duck:
Aber mal generell: Sollte ich lieber ein IXMLDocument oder TXMLDocument verwenden? |
AW: TXMLDocument freigeben
Zitat:
Vorteil: wenn für den Variablentyp das Interface statt der konkreten Klasse verwendet wird, kann die Klasse leichter gegen eine andere ausgetauscht werden, falls sie dasselbe Interface implementiert. Und man kann nicht versehentlich Methoden oder Properties benutzen, die nicht Teil des Interfaces sind. |
AW: TXMLDocument freigeben
Und da du dir so den try..finally-Block komplett schenken kannst. Beim Verlassen der Methode wird das IXmlDocument dann automatisch freigegeben.
PS: Wozu ist das "Active" eigentlich gut? Ich habe das noch nie verwendet... |
AW: TXMLDocument freigeben
Zitat:
Variable ist nur innerhalb der Methode gültig -> Daher sollte das Interface beim Verlassen der Methode keinen gültigen Zeiger mehr haben -> Interface wird aufgeräumt, auch ohne Doc := nil, korrekt? Zitat:
Zitat:
![]() Verwendet man anstelle von TXMLDocument.Create direkt NewXMLDocument, dann kann man sich das .Active auch sparen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 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