→ ahwater01: 我認為除非你還要重複使用那個pointer,不然free過後還 05/29 11:28
→ ahwater01: 指回null,是沒意義又降低perfomance 05/29 11:29
推 qsort: 樓上+1, pointer有reuse需求, 才需要在free的時候設成NULL 05/29 12:34
推 overhead: 你前輩是對的 真的沒問題 05/29 12:37
→ overhead: 雖然該pointer指向某個地方 但是在他離開function消失 05/29 12:38
→ overhead: 之前你都不會再用他 那就不需要加了 05/29 12:39
→ james732: 已經退租的房子,有沒有把契約打叉的差別?XD 05/29 12:43
→ james732: 你的想法比較謹慎,也沒有錯,但額外開銷是否值得呢? 05/29 12:44
→ james732: 開銷包括相對冗長的程式,以及執行所花費的時間 05/29 12:44
→ azureblaze: 這種通常會被optimize掉吧? 05/29 12:50
推 kdjf: 其實最佳化開下去,編譯器看到後面沒用到說不定直接丟了y 05/29 12:51
→ kroll: 恩, 我是因為吃過野指標的虧, 所以把 NULL 當作default在做 05/29 13:02
→ kroll: 所以這次剛好討論到, 想說還是把情況弄清楚比較好 05/29 13:04
→ kroll: 額外一提, BIOS很多時候是不做編譯最佳化的 05/29 13:04
→ kroll: 多謝各位先進指教 05/29 13:05
→ linotwo: 因為這種情況就算有 asign NULL 通常也會被最佳化掉 05/29 14:22
→ linotwo: 可以用一個巨集把 free 跟 asign NULL 包裝起來 05/29 14:23
→ linotwo: 好處是當指標的 scope 改變時可以減少非預期行為的機會 05/29 14:24
→ linotwo: #define SAFE_FREE(PTR) do{free(PTR);PTR=0;}while(0) 05/29 14:25
→ TobyH4cker: Delphi有個FreeAndNil() 題外 05/29 14:33
推 EdisonX: 通常指回 NULL 的情況是這個指標會重覆使用, 如 05/29 20:51
→ EdisonX: if(ptr==null) {ptr = new TYPE[] ;} 05/29 20:52
→ EdisonX: if(ptr!=NULL) { delete ptr ; ptr = NULL ;} 05/29 20:53
推 askacis: life 是local的話不用null,但多加一行也耗不了多少CPU 05/29 21:09
推 OPIV: lin 大 do while 可以拿掉吧 05/29 22:04
→ bibo9901: 用 do-while 是為了可以在 SAFE_FREE(PTR) 之後加上分號 05/29 22:37
→ azureblaze: if(foo) SAFE_FREE(bar); 這樣沒do-while會壞掉 05/29 22:43
→ azureblaze: do while false是macro的一種保險 05/29 22:44
→ KoenigseggG: 哈當初也是疑惑do while這個,不過google就有了@@ 05/29 23:17
→ uranusjr: 這是 coding style,團隊講好比較重要 (才知道如何維護) 05/29 23:18
推 ctrlbreak: 其實delete會檢查ptr是否為null, 所以也不用寫 05/31 09:20
→ ctrlbreak: if(ptr!=NULL) 這個. 05/31 09:21