看板 C_and_CPP 關於我們 聯絡資訊
正在工作,在修前人的 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 嗎? 一般都怎麼寫比較好? -- 2007: 用 2G 網路分享有關 3G 電波危害的嚇人文章 2010: 用 3G 網路分享有關 4G 電波危害的嚇人影片 2018: 用 4G 網路分享有關 5G 電波危害的嚇人高畫質影片 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.221.50.98 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1568795266.A.377.html
johnpage: 2 09/18 16:37
boss0405: 2,多檢查一下不會怎樣 09/18 16:43
Lipraxde: 如果不是預期會傳 nullptr 的話會用 assert 檢查吧 09/18 17:50
rodion: 按架構layer區分是否檢查null: 檢查只需在layer的"介面" 09/18 18:12
goliathplus: 一般是2 09/18 19:25
loveme00835: 這要看責任的分配, 正常是 3, 不過這要看你的指標是 09/18 21:28
loveme00835: 當 in/out param 哪一個, 給 nullptr 算不算例外, 這 09/18 21:28
loveme00835: 要先從 API design 開始講起 09/18 21:28
Gway: 慣例是2 確保fun 本身有排錯能力是基本 09/18 23:27
ando5566: 2 09/18 23:28
kevin14144: 需看情況。 就程式穩定度考量。選2 :當G方法覆用時, 09/19 00:13
kevin14144: 能夠保證不產生例外。 效能上:若F方法多次呼叫G方法 09/19 00:13
kevin14144: 這種情況 就可能需要考慮移除G方法內的判斷。 另外 09/19 00:14
kevin14144: 還有一種做法:就是保證不產生nullptr. ~ 09/19 00:14
CodingMan: 2 G G 可能不是只有這裡會被呼叫 09/19 06:37
謝謝大家,我會朝 2 的方向跟大家討論。 我的 function G 是不同地方都會 call 到的。 ※ 編輯: henry8168 (60.250.185.98 臺灣), 09/19/2019 16:31:32
jass970991: 2, 但是如果你設計的function會傳null出來,你應該 09/19 20:30
jass970991: 檢討不是設計錯誤 09/19 20:30
ketrobo: 我選擇caller檢查優先,在遇到檢查nullptr這樣的抉擇之前 09/20 01:35
ketrobo: ,我會更優先檢查使用指標的必要性,如果能以reference解 09/20 01:35
ketrobo: 決,或是null object pattern替代,則不使用pointer… 09/20 01:35