寫出一個不會造成資源分配崩潰的Delphi應用程序的關鍵是確保如果程序中分配了資源
即使當故障發生
程序也應能釋放占用的資源
文件內存WINDOWS資源和對象是一些必須時時加以注意的需確保釋放的資源下面的事件控制代碼例子中先分配了內存然後產生了一個錯誤而造成它不再執行釋放內存的程序代碼
ProcedureTForm.ButtonlClick(SenderTobject)
Var
PointerPointer
IntegerNumzeroIntger
begin
NumzeroΚ
GetMem(Pointer){分配K的內存資源}
IntegerΚdivNumzero{此句產生一個除法錯誤}
FreeMem(Pointer){這裡此句將不被執行}
end
盡管大多數錯誤不會這樣明顯但上例包含了重要的一點當錯誤產生後程序執行跳出模塊其後的資源釋放程序代碼不再被執行為了確保上例中的FreeMem能夠釋放被GetMem占用的內存資源必須把代碼放入一個資源保護模塊
這裡給出一個曲型的資源保護模塊的格式
{資源的分配}
try
{資源的使用}
finally
{資源的釋放}
end
上面的try...finally模塊可以使程序總能執行finally部分中的任何程序代碼即使有錯誤在保護模塊中產生當try部分中的某一條代碼執行引起錯誤時執行將直接跳到finally部分若執行中沒有錯誤產生則程序按正常順序執行
在下面的事件控制代碼例子中先分配了內存然後產生了一個錯誤但是仍然執行了釋放內存的程序代碼
ProcedureTForm.ButtonClick(SenderTobject)
Var
PointerPointer
IntegerNumzeroInteger
begin
NumzeroΚ
GetMem(Pointer){分配K的內存資源}
try
IntegerΚdivNumzero{此句產生一個除法錯誤}
finally
FreeMem(Pointer){這裡此句仍將被執行}
end
end
如何保障程序對所用資源的釋放在程序編制中是一個非常重要的問題必須在程序編制中加以實踐和注意
From:http://tw.wingwit.com/Article/program/Delphi/201311/25084.html