3 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
Free
有一些特殊的邏輯:它檢查是否Self
是nil
,如果是這樣,它返回而不做任何事情-這樣你就可以安全地調(diào)用X.Free
,即使X
是nil
。當(dāng)你編寫析構(gòu)函數(shù)時(shí),這很重要 - 大衛(wèi)在他的答案中有更多的細(xì)節(jié)。
您可以查看源代碼Free
以了解其工作原理。我沒有方便的Delphi源代碼,但它是這樣的:
procedure TObject.Free;begin if Self <> nil then Destroy;end;
或者,如果您愿意,可以將其視為等效代碼,使用Assigned
:
procedure TObject.Free;begin if Assigned(Self) then Destroy;end;
您可以編寫自己的方法來(lái)檢查if Self <> nil
,只要它們是靜態(tài)(即,不是virtual
或dynamic
)實(shí)例方法(感謝David Heffernan的文檔鏈接)。但是在Delphi庫(kù)中,Free
我所知道的唯一方法是使用這個(gè)技巧。
因此,Assigned
在調(diào)用之前,您無(wú)需檢查變量是否存在Free
; 它已經(jīng)為你做到了。這就是為什么建議是調(diào)用Free
而不是Destroy
直接調(diào)用的原因:如果你在nil
引用上調(diào)用了Destroy ,你就會(huì)遇到訪問沖突。
添加回答
舉報(bào)