网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月02日漏签0天
c++吧 关注:640,245贴子:2,116,282
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 26回复贴,共1页
<<返回c++吧
>0< 加载中...

关于程序防御性设计的一点纠结....

  • 只看楼主
  • 收藏

  • 回复
  • mxlcl0557
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
程序防御性设计直接影响到程序的稳定性,稳定的程序可以在程序异常的情况下,跳过本次作物,尽可能保证程序运作,而不是直接弹出个窗口随之崩溃掉,
对于服务器而言7*24小时运行是基本要求了,所以防御性设计必须非常完备,一切功能都是以保证自身正常运行的基础上进行的,如果本次操作导致异常,那么会输出日志并跳过本次操作
那么对于客户端是不是也需要这样设计呢,程序当然是越健壮越好,但是比如下面的情况:
class A;
class B
{
A *pA; // 这个指针被new出来的时候可以保证是有效的
};
B* g_B;
class C;
C::Func()
{
A* pa = g_B->GetA();
if( pa ) dosth(); // 这里做了防御性检测
else LOG();
}
因为class B中的指针 pA 被创建的时候可以保证是有效的,那么在class C中使用是不是可以省略 if(pa)这个防御性检测,当然如果只是这一个地方使用到,加上防御性检测当然是最好,但是如果很多很多个地方都需要 A* pa = g_B->GetA(); 这样的操作,每一处都加上防御性判断是不是有必要呢?


  • 大笨龙004
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你如何保证有效 new就一定会成功?


2025-11-02 02:54:54
广告
不感兴趣
开通SVIP免广告
  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
A& GetA()
{
assert(pA)
return *p;
}


  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
两点:
1.接口约束在入口和出口检查。
2.使用正确的类型。明确不需要nullable的场合使用指针就不合适。


  • 羊刀怎么合
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
GOLANG的恐慌恢复好像处理的不错


  • uni_gauldoth
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
客户端看做什么了,有时候立刻崩溃也好。总比状态不明好。现实中的程序都满是bug,考虑不过来,只能尽量小心了。


  • uni_gauldoth
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果getA不会返回null,就用assert,否则要处理错误。当然要看你的程序对稳定性的要求了。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 26回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示