Hallo.
Ich habe mal eine Frage zum Freigeben zuvor allokierten Speichers bzgl. dynamischen Arrays unter Delphi2010.
Gegeben sei folgender Konstrukt:
Delphi-Quellcode:
TNXXmlSearchResult = record
private
FElement: TNXXmlElement;
FAttribute: TNXXmlAttribute;
FIndex: Integer;
function GetName: string;
public
function AsString(const Default: string = ''): string;
function AsInteger(const Default: Integer = 0): Integer;
function AsFloat(const Default: Extended = 0.00): Extended;
property Attribute: TNXXmlAttribute read FAttribute write FAttribute;
property Element: TNXXmlElement read FElement write FElement;
property Name: string read GetName;
property Index: Integer read FIndex;
end;
TNXXmlSearchResults = array of TNXXmlSearchResult;
Ferner gibt es eine Funkion (in NXXmlDocument) zum Suchen von einzelnen
Xml-Elementen:
function Search(const XPath: string): TNXXmlSearchResults;
Diese Funktion hat in etwa folgenden Aufbau:
Delphi-Quellcode:
....Aufbau der Suchergebnisse in einer Liste (Hits)...
SetLength(Result, Hits.Count);
for i := 0 to Hits.Count - 1 do
with PHitItem(Hits[i])^ do
begin
Result[i].Element := Element;
Result[i].Attribute := Attribute;
Result[i].FIndex := i;
end;
Soweit so gut. Nun kann ich die Funktion ja wie folgt aufrufen:
Delphi-Quellcode:
var
XmlResults: TNXXmlResults;
SearchResult: TNXXmlSearchResult;
begin
XmlResults := NXXmlDocument.Search('/books/*/records');
try
for SearchResult in XmlResults do
{ do anything with SearchResult... }
finally
XmlResult := nil;
end;
end;
Laut Delphi Hilfe gibt man ein dynamisches Array frei, indem man diesem NIL zuweißt. Was aber passiert bei folgendem
Konstrukt, das man sehr häufig antrifft:
Delphi-Quellcode:
var
SearchResult: TNXXmlSearchResult;
begin
for SearchResult in NXXmlDocument.Search('/books/*/records') do
{ do anything with SearchResult... }
end;
Wie und wo und wird überhaupt der Speicher hier freigegeben?
Danke & Gruß,
- kaju