var
List: TObjectList<TNewObject>;
Obj: TNewObject;
begin
Obj := TNewObject.Create('Three');
List := TObjectList<TNewObject>.Create();
List.Add(TNewObject.Create('One'));
List.Add(Obj); Obj.free; //手動釋放
List.Pack(function(const L, R: TNewObject): Boolean begin result:= L = nil; end) //如何判斷L是否釋放
List.Free
readln;
end.
代碼如上。
本來TObjectList提供洗掉其中的元素后,自動釋放被洗掉的元素。
但是這個元素一旦在外部被洗掉,那么List.Free的時候,就會報錯。
因此,需要對List進行清理,即Pack,清除為空的元素。
于是就需要在Pack中,定義出什么樣的元素是空元素,涉及到對L的判斷。
if L = nil then ...
if Not Boolean(L) then ...
if Assigned(L) then ...
這三種辦法,都無法判斷Obj被Free掉了。。。
求高人指點!
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......