in diesem BeispielWird ein dynamisches Array automatisch freigegeben, wenn es den Gültigkeitsbereich verlässt?
procedure foobar;
var tab:array of integer;
begin
setlength(tab,10);
end;
ist die Anordnung zerstört oder der Speicher undicht?
Während es nicht auslaufen kann, sollten Sie wirklich Ihre eigenen Variablen freigeben. Die SetLength (Registerkarte, 0); es ist eine zusätzliche Linie. Wenn Sie sich darum sorgen, wickeln Sie es in einen try/finally Block. –
Ich kann diesen Ratschlag nicht unterstützen, @Ryan. Löschen Sie auch alle Ihre String-Variablen manuell? Wenn ich Code sehe, der Variablen Werte zuweist, die nie wieder benutzt werden, sagt es mir, dass der Programmierer nicht wirklich versteht, wie die Sprache funktioniert. Insbesondere stellt der Compiler bereits einen try-finally-Block um den Funktionskörper herum, um sicherzustellen, dass die Variable dynamic-array bereinigt wird. Ein eigenes Spiel ist zu viel. –
@Ryan, das ist einfach falsch. Der Aufruf von SetLength ist eine totale Verschwendung, sowohl von Tastenanschlägen als auch eines unnötigen Funktionsaufrufs zur Laufzeit. Dynamische Arrays werden vom Compiler verwaltet und automatisch freigegeben, wenn sie den Gültigkeitsbereich verlassen. –