作者henry8168 (番薯猴)
看板C_and_CPP
标题[讨论] 关於空指标的检查时机
时间Wed Sep 18 16:27:40 2019
正在工作,在修前人的 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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1568795266.A.377.html
1F:推 johnpage: 2 09/18 16:37
2F:推 boss0405: 2,多检查一下不会怎样 09/18 16:43
3F:→ Lipraxde: 如果不是预期会传 nullptr 的话会用 assert 检查吧 09/18 17:50
4F:→ rodion: 按架构layer区分是否检查null: 检查只需在layer的"介面" 09/18 18:12
5F:推 goliathplus: 一般是2 09/18 19:25
6F:→ loveme00835: 这要看责任的分配, 正常是 3, 不过这要看你的指标是 09/18 21:28
7F:→ loveme00835: 当 in/out param 哪一个, 给 nullptr 算不算例外, 这 09/18 21:28
8F:→ loveme00835: 要先从 API design 开始讲起 09/18 21:28
9F:推 Gway: 惯例是2 确保fun 本身有排错能力是基本 09/18 23:27
10F:推 ando5566: 2 09/18 23:28
11F:→ kevin14144: 需看情况。 就程式稳定度考量。选2 :当G方法覆用时, 09/19 00:13
12F:→ kevin14144: 能够保证不产生例外。 效能上:若F方法多次呼叫G方法 09/19 00:13
13F:→ kevin14144: 这种情况 就可能需要考虑移除G方法内的判断。 另外 09/19 00:14
14F:→ kevin14144: 还有一种做法:就是保证不产生nullptr. ~ 09/19 00:14
15F:推 CodingMan: 2 G G 可能不是只有这里会被呼叫 09/19 06:37
谢谢大家,我会朝 2 的方向跟大家讨论。
我的 function G 是不同地方都会 call 到的。
※ 编辑: henry8168 (60.250.185.98 台湾), 09/19/2019 16:31:32
16F:推 jass970991: 2, 但是如果你设计的function会传null出来,你应该 09/19 20:30
17F:→ jass970991: 检讨不是设计错误 09/19 20:30
18F:→ ketrobo: 我选择caller检查优先,在遇到检查nullptr这样的抉择之前 09/20 01:35
19F:→ ketrobo: ,我会更优先检查使用指标的必要性,如果能以reference解 09/20 01:35
20F:→ ketrobo: 决,或是null object pattern替代,则不使用pointer… 09/20 01:35