[討論] 關於空指標的檢查時機

作者: henry8168 (番薯猴)   2019-09-18 16:27:40
正在工作,在修前人的 code。
假設現在有 function F 和 function G,
function F 內執行的程式碼會呼叫 function G 並將某個指標作為參數傳入 G
想請問一下高手大大們,空指標的檢查一般都在:
1) function F 要傳入該指標到 function G 前
2) 收到該指標的 function G 的開頭
3) 1、2 兩者皆要
的哪個時機檢查最好?
又有什麼優缺點?
因為選方案 1 的話,要是某些時候呼叫 G 前忘記檢查就會出事,而且程式碼滿冗贅的;
可是如果用方案 2 的話,在某些情況下,
會呼叫 G 的 function F 可能已經存取過該指標,等於先保證不會為空,
那 2 的作法就等於每次都多一道檢查行為。
方案 3 沒看過,可能老鳥跟菜鳥沒串好 @@?
那有約定成俗的 coding rule 嗎?
一般都怎麼寫比較好?
作者: johnpage (johnpage)   2019-09-18 16:37:00
2
作者: boss0405 (boss)   2019-09-18 16:43:00
2,多檢查一下不會怎樣
作者: Lipraxde (Lipraxde)   2019-09-18 17:50:00
如果不是預期會傳 nullptr 的話會用 assert 檢查吧
作者: rodion (r-kan/reminder)   2019-09-18 18:12:00
按架構layer區分是否檢查null: 檢查只需在layer的"介面"
作者: goliathplus (No Comment)   2019-09-18 19:25:00
一般是2
作者: loveme00835 (髮箍)   2019-09-18 21:28:00
這要看責任的分配, 正常是 3, 不過這要看你的指標是當 in/out param 哪一個, 給 nullptr 算不算例外, 這要先從 API design 開始講起
作者: Gway (我愛的你 也愛我 好嗎?)   2019-09-18 23:27:00
慣例是2 確保fun 本身有排錯能力是基本
作者: ando5566 (風雲變色)   2019-09-18 23:28:00
2
作者: kevin14144   2019-09-19 00:13:00
需看情況。 就程式穩定度考量。選2 :當G方法覆用時,能夠保證不產生例外。 效能上:若F方法多次呼叫G方法這種情況 就可能需要考慮移除G方法內的判斷。 另外還有一種做法:就是保證不產生nullptr. ~
作者: CodingMan (程式俠)   2019-09-19 06:37:00
2 G G 可能不是只有這裡會被呼叫
作者: jass970991 (半糖綠假面超人)   2019-09-19 20:30:00
2, 但是如果你設計的function會傳null出來,你應該檢討不是設計錯誤
作者: ketrobo (貓蘿蔔)   2019-09-20 01:35:00
我選擇caller檢查優先,在遇到檢查nullptr這樣的抉擇之前,我會更優先檢查使用指標的必要性,如果能以reference解決,或是null object pattern替代,則不使用pointer…

Links booklink

Contact Us: admin [ a t ] ucptt.com