線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1235
推到 Plurk!
推到 Facebook!

再談Free

答題得分者是:ccchen
m0210
一般會員


發表:31
回覆:29
積分:17
註冊:2002-08-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-08 23:51:56 IP:211.22.xxx.xxx 未訂閱
請問.. 在應用程式裡所動態建立的物件(比方說Form),在執行時沒有Free的話, 當結束應用程式時會自動釋放記憶體嗎?
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-09 08:23:17 IP:203.217.xxx.xxx 未訂閱
引言: 請問.. 在應用程式裡所動態建立的物件(比方說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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-10 00:08:44 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 請問.. 在應用程式裡所動態建立的物件(比方說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
可否請教一下版主: 既然有了Owner時,會當Owner free時,自動將所動態建立的元件一併free... 那麼在什麼情形之下,才會去使用nil呢? 簡單說....不是只要設有self或其它的父類別....就不用去考慮free的問題了 嗎? Thanks!!
Dalman
一般會員


發表:27
回覆:22
積分:24
註冊:2002-08-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-10 05:32:14 IP:61.59.xxx.xxx 未訂閱
何時才使用 nil 做為物件建立的輸入引數,這個判斷其實粉簡單,當有下列情形時最好使用 nil: ‧程式員在應用程式執行時期,令程式動態建立起物件 Instance,在物件已完成它的使命後,令程式動態地銷毀物件,將物件所佔用的資源歸還給 OS 系統(注意應用程式尚未結束哦,程式員在編程時通常會知道某個物件被使用的生命週期,因此對於物件建立與物件銷毀,完全由程式員編程時來決定)。 ‧若應用程式內某個子功能對於系統資源非常地要求與計較,則物件的銷毀不會留在應用程式結束前才執行,而是由程式員根據「何時」與「某些狀況成立」下,在程式的適當地方執行某個物件的 Free() 函式。 不知道這樣說,大哥是否了解?講白話一點,就是自己想控制物件的建立與銷毀時就填入 nil 值(「各人造業各人擔」,不要把物件銷毀的動作都留給應用程式結束前才執行,否則容易讓系統資源耗盡。好程式的標準要求就是「穩→準→釋→快」)。
SKYSTAR
中階會員


發表:76
回覆:198
積分:64
註冊:2002-06-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-10 18:13:15 IP:211.74.xxx.xxx 未訂閱
引言: 何時才使用 nil 做為物件建立的輸入引數,這個判斷其實粉簡單,當有下列情形時最好使用 nil: ‧程式員在應用程式執行時期,令程式動態建立起物件 Instance,在物件已完成它的使命後,令程式動態地銷毀物件,將物件所佔用的資源歸還給 OS 系統(注意應用程式尚未結束哦,程式員在編程時通常會知道某個物件被使用的生命週期,因此對於物件建立與物件銷毀,完全由程式員編程時來決定)。 ‧若應用程式內某個子功能對於系統資源非常地要求與計較,則物件的銷毀不會留在應用程式結束前才執行,而是由程式員根據「何時」與「某些狀況成立」下,在程式的適當地方執行某個物件的 Free() 函式。 不知道這樣說,大哥是否了解?講白話一點,就是自己想控制物件的建立與銷毀時就填入 nil 值(「各人造業各人擔」,不要把物件銷毀的動作都留給應用程式結束前才執行,否則容易讓系統資源耗盡。好程式的標準要求就是「穩→準→釋→快」)。
嘻....完全了解....謝啦!!
系統時間:2024-04-29 20:37:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!