請問有關Array 裡的 tstringlist 的問題 |
尚未結案
|
SamSam1230
中階會員 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
|
SamSam1230
中階會員 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
|
cancer
高階會員 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
我來試看看, 這涉及到指標和物件的關連性,指標可說是物件的代理人,程式當中只跟代理人構通,就能使用物件。當代理人跟物件失去關連性之後,程式就無法跟物件構通,此時如果物件還留在記憶體,那麼,就沒有辦法把物件釋放,因為程式找不到該物件的代理人。 a[0] create 之後不 free // 物件建立
之後a[0]再 create // 此時代理人已跟別的物件簽約了,原物件已成孤兒 您呼叫了幾次 TStringList.Create,您就產生幾個 TStringList 物件。
a[0] := TStringList.Create;
a[0] := TStringList.Create; // 上面建立的TStringlist 變成孤兒。
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
引言: 之前問了很多有關free object 的問題 終於有一點的了解 但關於在array 裡的 tstringlist 還是有一些不清楚的地方 就是一個a : array [0..9]of tstringlist a[0] create 之後不 free 之後a[0]再 create 那第一個的 a[0] tstringlist 是不是 = 第二個 ? 如果不是, 那代表不free , 就會一直產生新的 tstringlist object? 謝謝?在 Create 之前,先判断一下 a[0]里是否已经有东西了。如果有了,就不Create. if Assigned(TObject(a[0])) then begin //已经有东西了,就算要Create也必须先把这个释放掉: FreeAndNill(TObject(a[0])); end; |
SamSam1230
中階會員 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
謝謝pcplayer99 , cancer 大大 我會try 一下 pcplayer99 的做法 ----------------------------------
我用的是D4
是不是沒有 freeandnil 呢?
uses 已經加了 sysutils
還是沒有 那如果改成這樣應該是一樣吧
如果有錯請指出 謝謝
if Assigned(a[0]) then begin a[0].Free(); end;發表人 - samsam1230 於 2005/05/03 12:27:24 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |