免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mmmixx
打印 上一主题 下一主题

脱裤子放屁的代码…… [复制链接]

论坛徽章:
0
81 [报告]
发表于 2007-08-09 23:46 |只看该作者
原帖由 flw 于 2007-8-9 23:30 发表

不是弥补,是隐瞒。
正如有些人看到自己的程序总是收到 SIGSEGV 信号,于是干脆屏蔽掉它一样。


有些情况下,不是隐瞒,是需求。
有些系统关系到金钱,人命是绝对不能coredump的。

原帖由 james_h 于 2007-8-9 22:27 发表
楼主没有写过并发多线程应用。

鉴定完毕。


同意。
不能因为一个任务出了问题而使整个系统崩溃。

[ 本帖最后由 evermore 于 2007-8-9 23:52 编辑 ]

论坛徽章:
0
82 [报告]
发表于 2007-08-09 23:50 |只看该作者
前面的回帖没仔细看完,就说说个实际的情况,第一个代码段,说个最简单的情况,用指针的之前总要去判断指针是不是NULL的吧,如果free指针之后不置NULL的话,上面那个判断如何进行,或者有什么别的办法去解决上面的那个可能会使用野指针的问题呢?

反对第一段代码的人能说说吗?

[ 本帖最后由 converse 于 2007-8-9 23:52 编辑 ]

论坛徽章:
0
83 [报告]
发表于 2007-08-09 23:59 |只看该作者
原帖由 converse 于 2007-8-9 23:50 发表
前面的回帖没仔细看完,就说说个实际的情况,第一个代码段,说个最简单的情况,用指针的之前总要去判断指针是不是NULL的吧,如果free指针之后不置NULL的话,上面那个判断如何进行,或者有什么别的办法去解决上面 ...

问题在于,那个是析构函数,在虚构函数中,还有什么必要 NULL 呢……

论坛徽章:
0
84 [报告]
发表于 2007-08-10 00:03 |只看该作者
你可以看看我前面的回帖
上面说了一种情况

原帖由 antigloss 于 2007-8-9 23:59 发表

问题在于,那个是析构函数,在虚构函数中,还有什么必要 NULL 呢……

论坛徽章:
0
85 [报告]
发表于 2007-08-10 00:05 |只看该作者
原帖由 antigloss 于 2007-8-9 23:59 发表

问题在于,那个是析构函数,在虚构函数中,还有什么必要 NULL 呢……


上面很多人在批评free指针之后置NULL的做法,不是单纯的析构函数中的free之后置NULL吧?但愿我没有看错。

论坛徽章:
0
86 [报告]
发表于 2007-08-10 00:17 |只看该作者
原帖由 mmmixx 于 2007-8-9 18:35 发表
竟被公司元老列为好的习惯……


~dtor()
{
    if ( xx )
    {
        delete xx;
        xx = NULL:
    }
}


我说,都析构了,还 NULL 什么……


  int ret = -1;

  if ( xx )
  { ...




xx既然是指针变量, delete操作符也没有定义置其空, 程序员当然可以根据喜好自己去置空。楼主说delete了还置空属于脱了裤子放屁,其实错了,很明显不是放屁,是擦屁.
当然,一般情况下, xx除了还有其他用处外(比如没必要重新声明一个变量,就还用xx去指其他,好比刚好屙完, 又一泡就来了, 就没必要xpp了), 程序员应该不会去使用这个指针,
如果用了, 那肯定是为了反衬楼主 的英明神武, 先见之明.
如果楼主只针对析构函数, 那就纯属习惯问题.  便密没屙出来, 习惯上是要xx的.  没什么大不了, 火气太大是不好的.

第二段代码, 很多人解释了.
代码是有延续性的东西, 前面的人做的工作保留下来是绝对有用的, 例如如果程序需要重新调试, 就不需要重新写那些assert了. 程序的开发时间越长,
它的历史痕迹就越多, 这些东西有追溯的作用.  一个正常运行的程序,正常流程只占代码的少数部分,大部分是错误判断, 如果程序走的流程越少, 说明你的程序越成功.   即使很多毫无用处的代码,
很可能是程序员用来安慰自己的, 这种代码越多,说明这个程序员的素质越高, 在编程时就居安思危的程序员, 无论他的程序算法好坏, 风格如何, 至少在出现问题时能快速找到问题.

[ 本帖最后由 ChogenLei 于 2007-8-10 00:24 编辑 ]

论坛徽章:
0
87 [报告]
发表于 2007-08-10 00:21 |只看该作者
原帖由 benjiam 于 2007-8-9 22:07 发表
if ( xx )
    {
        delete xx;
        xx = NULL:
    }


好处。

如果xx 是一个指针的引用。  这么做是安全的,而且告诉了外部 我已经删除了这个指针所指的内存。 不讲xx 设置为NULL, 外部的 ...

设计有问题
原帖由 飞灰橙 于 2007-8-9 22:21 发表
真是太奇怪了,对付这么个问题,
为什么不用智能指针?很好的自动脱裤机耶!


论坛徽章:
0
88 [报告]
发表于 2007-08-10 09:04 |只看该作者
关于析构要将指针赋值为NULL 的原因。

if ( xx )
    {
        delete xx;
        xx = NULL:
    }


好处。

如果xx 是一个指针的引用。  这么做是安全的,而且告诉了外部 我已经删除了这个指针所指的内存。 不讲xx 设置为NULL, 外部的程序仍然可能使用这指针

假设代码如

class b {
char * &a ;
}

char *p = new char[100];

我在b 析够的时候,可以删除也可以不删除p 所指的内存。

外部的代码可以根据p的值,来决定需要重新new 还是不new

论坛徽章:
0
89 [报告]
发表于 2007-08-10 09:20 |只看该作者
原帖由 飞灰橙 于 2007-8-9 18:41 发表
你说的没错,其实这种 delete后再设NULL的代码,
在我看来简直就不可容忍!!
原因在于这个习惯,与其说使指针更安全,倒不如说某种程度上在鼓励隐藏一些bug,
隐藏bug带来的后果极其严重,会让你花费N倍的时 ...


但是我看MFC的源码里面,微软的人都这么干啊?既然微软的人这么干,肯定是有他的理由的吧?
虽然我说不出理由.

论坛徽章:
0
90 [报告]
发表于 2007-08-10 09:20 |只看该作者
裤子已脱,屁且放来!
习惯对于特定情况的优劣貌似讨论没什么意义
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP