感慨:编写坚固的代码

原创 2006年06月19日 22:41:00
    分析了公司的一个项目代码,结果令我非常沮丧。分析的这个项目大约有500个文件, 并不很大。我承认,这个项目的程序员都是训练有素的,然而,都是C语言的训练有素,不是C++的。
    我们为什么选择C++作为一个软件项目的开发语言?我想,决不是因为C++更复杂华丽,也不是因为C++支持OO,OB,也决不是因为C++是支持GP的最佳选择。论二进制兼容性,C++不如C;论OO支持的干净利落,C++不如Java和C#-----C++太华丽和复杂;也许GP是一个不错的选择理由,但是,大部分程序员并没有训练有素地掌握GP。当然,我无法揣测别人为什么会选择C++,对我来说,选择C++的理由只有两个:1是C++的遗留项目,2是需要C++超群的表达力。
   然而,C++充满了陷阱和习俗,恣意妄为的人必将受到惩罚。即使对于我这样一个狂热的技术跟风者而言,也没有比写坚固的代码更重要的了----因为我首先是一个现实的软件工程师。对于所有的C++程序员来说,也许没有比《Effective C++》更重要的书了,每个C++程序员都应该熟读此书。而今天,我们还有《C++编程规范》作为我们的编程指南,正像我曾经说过得那样,值得我们将这101条贴在显示器上每日诵读.我愿意不厌其烦地强调这两本书,它们是所有打算用C++从事工程活动的程序员们的圣经。
   长期以来,我们一直没有对代码的安全性给予足够的重视----MS的那套安全函数并非我所谓的安全代码。我们必须把代码的安全性提高到一个非常重要的程度:安全性是正确性的组成部分。也许这么说是耸人听闻,但是,我越来越坚信这个观点是完全正确的。
    简单的回顾一下项目中的严重缺陷。
    忽略了copy ctor和assignment的默认行为。在一个嵌入式引用计数的设计中,当对象被复制时,导致引用计数部分也被简单复制,这很显然是错误的。EC中强调过该如何注意copy ctor和default assignment,这样的错误完全是可以避免的。
    引用计数,伴随的当然是smart pointer的设计。必须认识到,编写一个具有工业强度的smart pointer是非常有难度的,即使我们并不需要一个通用的设计,要实现一个专用的、足够坚固和安全的smart pointer也不是一蹴而就的事情。有些问题,即使是boost::shared_ptr或者是Loki.SmartPtr这样的实现也是有缺憾的----当然,也可能是我孤陋寡闻----如何实现安全的const pointer?提供什么样的语义是最佳的?
    动态分配数组的问题.大量的new Type[size]...delete [] p;这样的代码。这样的代码如何保证异常安全性呢?大量的try...catch把代码弄得一团糟.为什么不用boost.scoped_array这样的工具呢?即使不愿意依赖第三方库,实现一个简易的scoped_array也不过十几行代码而已!
   回顾一下STL,必须成对的操作,有印象的大约只有allocator的4成员函数。所有的容器、算法以及iostream家族,没有必须成对操作的函数。事实上,拥有RAII这样的利器,我们应该封装几乎所有的配对操作----竭尽全力!我所谓的配对操作是说那些必须成对执行,否则就不可能正确的操作,例如:new/delete, new[]/delete[]。
(continue)

感慨:编写坚固的代码

感慨:编写坚固的代码     分析了公司的一个项目代码,结果令我非常沮丧。分析的这个项目大约有500个文件, 并不很大。我承认,这个项目的程序员都是训练有素的,然而,都是C语言的训练有素...
  • ilvu999
  • ilvu999
  • 2012年10月17日 20:35
  • 408

感慨:编写坚固的代码(2)

    我们要想写文章,最起码,要能认识足够多的字.但是,更重要的,是要知道我们想说什么。这两个方面都是不可或缺的。那么,是不是要等到认识了所有的字才能写文章?当然也不是。如果每写几个字就需要查字典恐...
  • wingfiring
  • wingfiring
  • 2006年06月26日 15:04
  • 4306

香港坚固金业的黑幕,属于非法投资平台。

2015年4.29晚上凌晨两点半 我结束了建仓操作,当时没又发现账户 资金问题,后来第二天早晨发现账户 被非法操作做单,所有资金信息都被在美国时间22:08开始到22:56仅仅不到一个小时时间,所有资...
  • xiaozhulo
  • xiaozhulo
  • 2015年05月02日 21:18
  • 816

工作一年的感慨

我不知道如何定义工作这一年,相比于一些人,我是退步了,工资没涨成,人际也混的不咋的,也不确定下一年是否还留在这儿。不过我很庆幸的是,工作一年来,我坚持了我的原则和个性,我没有因工作的压力而颓废沮丧,知...
  • qq522935502
  • qq522935502
  • 2012年11月08日 13:59
  • 1377

临近过年的一点感想

又是一年春节来到,感慨有一些。其实我很不习惯叫春节,因为我是村儿里人,小时候大人都是叫做过年。作为一个IT民工,俗称打工仔,我已经两个过年没在家过了,当然我不是嗜工作如命的人那类人,主要是因为没钱,再...
  • yysyangyangyangshan
  • yysyangyangyangshan
  • 2012年01月14日 20:50
  • 1719

写给自己,一年的回首及最近的感想!

作为一个计算机系的学生,大二了,也接触了本课程的基础,比如说C++。可是,直到现在,学了一年后,再来编程序,发现对它依旧很陌生,有时候逻辑想,算法想得到,但编起来就这里细节不知道该如何写,那里该不知道...
  • Beckymoon
  • Beckymoon
  • 2010年12月08日 20:39
  • 139

看了以后感触良多

转载自:http://blog.csdn.net/m13666368773/article/details/7817938   今天是 22 岁的最后一天。几个月前,我从沃顿商学院毕业,用文凭...
  • a19881029
  • a19881029
  • 2012年08月08日 14:56
  • 1665

做爸爸了,再看看自己的现状,真的有太多感慨啊

2006.07.24,老婆给我生了一个8.1斤的女儿,非常可爱 
  • shineclub
  • shineclub
  • 2006年08月28日 10:45
  • 400

人生更是变幻莫测

忘记两年前在什么情景下写了篇博客《人生真是变幻莫测》。现在回头看看当时的自己还是很年轻的,刚正式走上工作岗位,开始总是很有激情,很努力。虽然觉得当时的工作并不是自己真正期望的,尤其是跟一些其他找到更好...
  • llmlx
  • llmlx
  • 2010年08月01日 23:23
  • 494

由耳环丢失之所想

           上次丢了一只心爱的耳环,我这个人也是有点死脑筋,选择的东西就不轻易去改变,于是又去商店买了一对一样款式,于是现在有了三只一模一样的耳环。            今天上班走得匆忙,...
  • sophiazhou
  • sophiazhou
  • 2011年03月02日 09:34
  • 456
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:感慨:编写坚固的代码
举报原因:
原因补充:

(最多只允许输入30个字)