[問題] delete function 的寫法

看板C_and_CPP作者 (貧窮工程師(b))時間14年前 (2010/06/30 14:44), 編輯推噓3(3010)
留言13則, 6人參與, 最新討論串1/1
本來的寫法 a = new A; b = new B; c = new C; ..... if (a!=null) delete a; a = null; if (b!=null) delete b; b = null; if (c!=null) delete c; c = null; ..... 現在想改寫成 void Del(???? obj) { if(obj!=null) delete obj; obj = null } Del(a); Del(b); Del(c); ..... 其中????的部份我本來是用 void* 來代替 但我發現,跑完之後,abc的指標都還在 如果用第一種寫法,跑完abc都會是null 我也試過 Del(&a); .... 但結果好像也是一樣~ 所以不知道問號的部份 該寫什麼東西呢? 謝謝。 (我的ide是用bcb5) -- http://blog.pixnet.net/brian6724 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.188.59

06/30 14:51, , 1F
直接定義成 macro
06/30 14:51, 1F

06/30 14:53, , 2F
#ifndef SAFE_DELETE
06/30 14:53, 2F

06/30 14:53, , 3F
#define SAFE_DELETE(p) \
06/30 14:53, 3F

06/30 14:54, , 4F
{ if(p) { delete (p); (p) = NULL; } }
06/30 14:54, 4F

06/30 14:54, , 5F
#endif
06/30 14:54, 5F

06/30 15:09, , 6F
不需要 if(p) 直接 delete 即可
06/30 15:09, 6F

06/30 15:14, , 7F
多一項檢查 這是習慣
06/30 15:14, 7F

06/30 15:15, , 8F
感謝~感謝~
06/30 15:15, 8F

06/30 15:25, , 9F
void *&
06/30 15:25, 9F

06/30 16:25, , 10F
不需要多一項檢查,因為 delete 本來就會幫你檢查
06/30 16:25, 10F

06/30 16:25, , 11F
再多寫,反而不易閱讀
06/30 16:25, 11F

06/30 16:27, , 12F
另外用 inline function 來做會比 macro 好一點
06/30 16:27, 12F

06/30 18:53, , 13F
delete NULL 不會有任何效果,不需要檢查
06/30 18:53, 13F
文章代碼(AID): #1CAkU_p3 (C_and_CPP)