给野指针赋零也是恶习吗?

来源:互联网 发布:程序员在北京能挣多少 编辑:程序博客网 时间:2024/05/21 13:53

看了VCKBase上周星星的《两个恶习》。原文的URL:http://blog.vckbase.com/bruceteen/archive/2010/06/11/47620.html
第二个所谓的“恶习”是:对于不再使用的指针赋零。

我认为作者是错误的。

给野指针赋零,应该和变量初始化一样,都是C++程序员应有的好习惯。不应该称之为“恶习”!

文章下面持反对意见者中,“七猫”的回帖让我印象最为深刻。他说的“防御性编程”深合我心。之前我从未听说过这一词汇,但是其间蕴含的“软件工程”思想却和我这两年从商业软件编程的实践中得到的经验教训是一致的。释放了内存却不归零的指针是为“野指针”,一旦为人所误用,就构成了威胁,就意味着若干小时的debug工作量,就意味着加班,就意味着压力,就意味着开发周期的加长、经费的增加。

周星星在文章中不断重复着一句话:“给不再使用的指针赋零是浪费”。可现实是,我们经常要面对着若干年前遗留的代码,许多别人开发的程序库,我们要使用许多别人编写的类,修改已经离职的人的bug。难道说,我们要看遍所有的程序逻辑之后才决定某个指针已经确实“不再使用”了吗?就算都是自己的代码,在设计几经更改之后,十个月之后,你仍然记得某个指针的生存周期?

这个时候,给指针赋个零,这就相当于告诉别人:“此指针已经释放,不得使用!”。多么简单经济。

想到以前在JavaEye上看到的一篇文章,作者说,在程序中注释其实是不必要的。其中之一的理由是:“某个国外的高手说,重构好的代码无需注释。”

 

问题是,他以什么标准来判定代码已经重构好?他怎么知道将来的设计会不会影响到这些代码?他怎么知道将来不会有人修改这些代码?

 

如果无法知道代码在何时可以保持稳定,那么只能保守地认为重构将贯穿代码存在的始终。

原创粉丝点击