當元件Create失敗時...需要Free嗎? |
答題得分者是:william
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
請教各位大大: 當動態建立元件時,如果因任何問題而導致該建立元件失敗時,此刻是否也須要
把元件給Free嗎? 意思是說,既然建立失敗,不是應該沒有此元件的存在,也應該
是沒有佔用記憶體吧!! (也許我的觀念是錯的...還請糾正!!)
如:
try xxx := yyy.create(...); .... finally xxx.free; end;上面的寫法,應該是正確的寫法....只是如果今天把Create放到try之外的話, 那麼當Create失敗時,是否會出現錯誤訊息呢? 又如果把Create放到try之外時, 是否應該在最後一行加上free呢? 如下: xxx := yyy.create(...); try .... finally .... end; xxx.free;上面的寫法,會不會在建立失敗時,而又去free而導致錯誤呢? (因為沒有元件可 以free...) 我已查過網站中相關的文章...但是都沒有說到當建立失敗時的情形...故來請 教各位先進....還請指教!! Thanks!! |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
Maybe you could try:
try xxx := yyy.Create; try {....} finally xxx.Free; end; except {...} end;IMHO, some memory may have been allocated even the constructor failed. Since exception inside Create should rarely happen and hence most people will ignore the possible leakage... |
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
引言: Maybe you could try:謝謝您的回答.... 只不過我在想...難不成為了要很嚴謹的撰寫程式...必須要加上一連串的try.. .看起來實在是有點累人...且好像又回到了Clipper的時代了... 因此...try xxx := yyy.Create; try {....} finally xxx.Free; end; except {...} end;IMHO, some memory may have been allocated even the constructor failed. Since exception inside Create should rarely happen and hence most people will ignore the possible leakage... |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言:您好: 我忘了向您請教一點... 就是...在>>< face="Verdana, Arial, Helvetica"> Personally I won't free it since its constructor failed... If you would like to give it a try, maybe this way could be of some help:try xxx := yyy.Create; try {....} finally xxx.Free; end; except try FreeAndNil(xxx); except end; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |