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

關於對一個Form執行Action=caFree的疑問

尚未結案
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-09 11:13:36 IP:210.243.xxx.xxx 未訂閱
各位好: 基於以下二篇的討論串,對於一個Form執行了 Action=caFree後,還能不能執行Form1=NULL, 請見以下連結: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44564 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46154 由於小弟也常常使用Form1=NULL這種用法,如果真的有問題,如海星大哥 所說,那真的很可怕(很難抓問題點) 想請教各位看倌這方面的心得 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
kwu
中階會員


發表:10
回覆:57
積分:58
註冊:2003-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-10 13:44:36 IP:61.63.xxx.xxx 未訂閱
ENIX007你好:
小弟也常用 Form1 = NULL 這類的用法
不過我的做法是在 FormClose 時用 caFree
FormDestroy 時再把 Form1 = NULL
以避免 Close 到 Destroy 之間有些會用到 Form1 的指標
但整體上感覺 delete 類別只會把所使用的記憶體釋放
以供其他應用程式或程式本身下次要 allocate memory 時才能要到這塊記憶體
而不會將 Form1 指標指向 NULL
可以從 caFree 以後去觀察 Form1 的指標依然是當初 new 時的位置
所以 delete Form1 以後去操作 Form1 的類別成員皆會產生錯誤訊息    另外小弟也有一些自訂類別 new 之後在 delete 以後如果沒有將指標指向 NULL
下次要判斷該類別是否已存在時會判斷為 true    if(!TMyClass)
  TMyClass = new TMyClass();    會導至不做 new 的動作而產生錯誤
所以小弟個人覺得 delete 只是把記憶體釋放並不會將指標也釋放
而我們所做的將指標指向 NULL 應該不會有什麼不妥才對
以上純為個人見解,如有不對之處尚請指教
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-11 09:13:02 IP:210.243.xxx.xxx 未訂閱
謝謝kwu兄的回應,我在書上也看到這麼一段話  
引言: delete並沒有動到指向該塊記憶體的指標,也不會更動該指標內的 位址值,因此你得小心千萬別拿來使用 取自Robert Lafore C 聖經II譯本,譯者許建發
我想應該是沒問題吧(雖然盡信書不如無書!!)...除非caFree又做了什麼不可告人的事 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
系統時間:2024-06-24 20:35:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!