TOjectList = Class (Tlist);
TOjectList繼承Tlist,從名字上看就可以知道它是專門為對象列表制作的,那麼他到底豐富了那些功能呢?
首先是 TObject 作為對象可以方便使用,無需指針強制。
豐富了 Notify 針對當前狀態處理,比如如果是刪除就將該點的引用一並清理掉;
procedure TObjectList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if (Action = lnDeleted) and OwnsObjects then
TObject(Ptr).Free;
inherited Notify(Ptr, Action);
end;
在 Tlist 中,有 Clear(),將呼叫 SetCount,SetCapacity;即刪除所有。
procedure TList.Clear();
begin
SetCount(0);
SetCapacity(0);
end;
當該對象銷毀是,也會自動調用Clear() 清除所有。
destructor TList.Destroy;
begin
Clear();
end;
總結:如果有一個對象需要用到列表,最好從 TOjectList 開始繼承,對資源釋放有完善的處理機制。
如果從 Tlist 繼承也必須實現 Notify() ,方便資源釋放,減少麻煩。