再談Free |
答題得分者是:ccchen
|
m0210
一般會員 發表:31 回覆:29 積分:17 註冊:2002-08-23 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
引言: 請問.. 在應用程式裡所動態建立的物件(比方說Form),在執行時沒有Free的話, 當結束應用程式時會自動釋放記憶體嗎?動態建立的物件如果有owner, 當owner free時會將之free 例如: 在TForm1的method中 button1:=TButton.create(self) 則form1 free時會free button1 如果無owner, 而不自行free就永遠不會free了 例如: button1:=TButton.create(nil); //無owner 所有form預設之owner為application, 故程式結束時form均會被free |
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
引言:可否請教一下版主: 既然有了Owner時,會當Owner free時,自動將所動態建立的元件一併free... 那麼在什麼情形之下,才會去使用nil呢? 簡單說....不是只要設有self或其它的父類別....就不用去考慮free的問題了 嗎? Thanks!!引言: 請問.. 在應用程式裡所動態建立的物件(比方說Form),在執行時沒有Free的話, 當結束應用程式時會自動釋放記憶體嗎?動態建立的物件如果有owner, 當owner free時會將之free 例如: 在TForm1的method中 button1:=TButton.create(self) 則form1 free時會free button1 如果無owner, 而不自行free就永遠不會free了 例如: button1:=TButton.create(nil); //無owner 所有form預設之owner為application, 故程式結束時form均會被free |
Dalman
一般會員 發表:27 回覆:22 積分:24 註冊:2002-08-21 發送簡訊給我 |
何時才使用 nil 做為物件建立的輸入引數,這個判斷其實粉簡單,當有下列情形時最好使用 nil: ‧程式員在應用程式執行時期,令程式動態建立起物件 Instance,在物件已完成它的使命後,令程式動態地銷毀物件,將物件所佔用的資源歸還給 OS 系統(注意應用程式尚未結束哦,程式員在編程時通常會知道某個物件被使用的生命週期,因此對於物件建立與物件銷毀,完全由程式員編程時來決定)。 ‧若應用程式內某個子功能對於系統資源非常地要求與計較,則物件的銷毀不會留在應用程式結束前才執行,而是由程式員根據「何時」與「某些狀況成立」下,在程式的適當地方執行某個物件的 Free() 函式。 不知道這樣說,大哥是否了解?講白話一點,就是自己想控制物件的建立與銷毀時就填入 nil 值(「各人造業各人擔」,不要把物件銷毀的動作都留給應用程式結束前才執行,否則容易讓系統資源耗盡。好程式的標準要求就是「穩→準→釋→快」)。
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
引言: 何時才使用 nil 做為物件建立的輸入引數,這個判斷其實粉簡單,當有下列情形時最好使用 nil: ‧程式員在應用程式執行時期,令程式動態建立起物件 Instance,在物件已完成它的使命後,令程式動態地銷毀物件,將物件所佔用的資源歸還給 OS 系統(注意應用程式尚未結束哦,程式員在編程時通常會知道某個物件被使用的生命週期,因此對於物件建立與物件銷毀,完全由程式員編程時來決定)。 ‧若應用程式內某個子功能對於系統資源非常地要求與計較,則物件的銷毀不會留在應用程式結束前才執行,而是由程式員根據「何時」與「某些狀況成立」下,在程式的適當地方執行某個物件的 Free() 函式。 不知道這樣說,大哥是否了解?講白話一點,就是自己想控制物件的建立與銷毀時就填入 nil 值(「各人造業各人擔」,不要把物件銷毀的動作都留給應用程式結束前才執行,否則容易讓系統資源耗盡。好程式的標準要求就是「穩→準→釋→快」)。嘻....完全了解....謝啦!! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |