Hallo Was ist der beste Weg, um verschachtelte Try & finally-Anweisungen in Delphi zu tun?
var cds1 : TClientDataSet;
cds2 : TClientDataSet;
cds3 : TClientDataSet;
cds4 : TClientDataSet;
begin
cds1 := TClientDataSet.Create(application );
try
cds2 := TClientDataSet.Create(application );
try
cds3 := TClientDataSet.Create(application );
try
cds4 := TClientDataSet.Create(application );
try
///////////////////////////////////////////////////////////////////////
/// DO WHAT NEEDS TO BE DONE
///////////////////////////////////////////////////////////////////////
finally
cds4.free;
end;
finally
cds3.free;
end;
finally
cds2.free;
end;
finally
cds1.free;
end;
end;
Können Sie eine bessere Lösung vorschlagen?
3 Stimmen
Zuallererst: Übergeben Sie keinen Eigentümer, der nicht null ist, an Create, wenn Sie die Objekte ohnehin selbst freigeben wollen. Dies fügt nur eine Menge unnötigen Overhead hinzu.
0 Stimmen
Aaaaah, eine Reise in die Vergangenheit.
2 Stimmen
Ich weiß, 6 Monate zu spät - aber ich denke, dass dies technisch korrekt und der sichere Weg ist. Alle vorgeschlagenen Antworten haben mögliche Lecks oder benötigen Backup/Hilfsroutinen. Dieser Code wird einfach funktionieren, ohne Lecks.
1 Stimmen
Imho gibt es keinen besseren Weg - nur der Nicht-Nil-Konstruktor sollte nicht verwendet werden.