TColor
是一個整數類型,一個值類型,而不是一個類。因此它不需要被釋放。的TColor
定義是
TColor = -$7FFFFFFF-1..$7FFFFFFF;
所以你的數組是非常equivlent,爲alloction的宗旨,以
myarr: array [0..21] of array [0..21] of Integer;
這樣一個數組的元素不需要被釋放。無論您聲明它在哪裏(全局,本地,類成員,記錄成員),數組本身都將自動釋放。這也是一種價值類型。
最好的線索,你不需要免費TColor
是你從來沒有創建它的第一個地方。分配和釋放總是配對。
另外,您不應該直接撥打Destroy
。你在代碼編寫Destroy
實現,只有當被覆蓋的析構函數的一類,即是這樣的:
destructor Destroy; override;
...
destructor TMyClass.Destroy;
begin
FMyObject.Free;
inherited;
end;
當你摧毀一個對象,你應該調用它Free
。做不是直接撥打Destroy
。爲什麼不?那麼,Free
實現這樣的:
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
的if
語句的意思是,如果你有一個對象引用是nil
,那麼它是安全地調用就可以了Free
不用擔心被引發異常。
這對於在構造函數中引發異常的情況很重要。當發生這種情況時,調用析構函數。如果構造函數僅部分完成,則某些字段仍將爲nil
。調用Free
允許我們編寫乾淨的析構函數代碼。如果沒有這種方便,我們所有的析構函數將如下所示:
destructor TMyClass.Destroy;
begin
if FMyObject3<>nil then
FMyObject3.Destroy;
if FMyObject2<>nil then
FMyObject2.Destroy;
if FMyObject1<>nil then
FMyObject1.Destroy;
inherited;
end;
您不能也不需要銷燬一個靜態數組。 – RRUZ
爲什麼-1,請說明一個理由 – VibeeshanRC
我也想知道。@vibeeshanRC,你不能摧毀TColor。如果它是一個類的數組,你可以但TColor不是一個類。你能發佈更多的代碼嗎? –