感慨:编写坚固的代码

原创 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
  • 396

打造坚固的安全的Linux服务器(ssh登录篇)

来源:本站转载 作者:佚名 时间:2011-02-23 TAG: Nov 3 01:22:06 server sshd[11879]: Failed password for root ...
  • shoyer
  • shoyer
  • 2013年11月29日 13:25
  • 765

“好奇号”火星车的坚固车轮

          “好奇号”在火星表面,走走停停,需要磨蹭两年时间,车轮必须坚固,不能中途掉链子。请看下图:            上图是9月9日从火星表面最新传回地球的,...

Android系统首次应用于工业级坚固型PDA

来自国外媒体的消息,总部位于韩国的Bluebird是一家专业生产Pidion(工业级手持电脑)的公司,近日该公司宣布旗下的坚固型工业级PDA产品BIP-6000将升级支持运行Android系统。 ...

坚固金业:黄金现货操盘技巧

根据贵金宝坚固金业的分析师的讲解现货黄金是指进行实物交割的,比如金条,金币之类。而黄金现货只是一种虚拟的账面交易,不进行实物交割。在你的存折上反映你有几克黄金,只是一种记账符号,不能提取实物黄金。它只...

【ZSTU4214 2015年12月浙理工校赛 E】【看似区间DP实则线性相加 脑洞 好题】Power Eggs 最少扔鸡蛋次数测出其坚固度 学会状态表示

4214: Power Eggs Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 130  Solved: 24 Description ...

用软件和网络,打造维护方便、坚固耐用的学生机房

主题词:软件、网络、维护方便、耐用、校园网络 摘 要:在现在信息技术飞速发展的世界中,各种威胁攻击无时无刻不在觊觎着校园的教育网络环境,给学生的学习和教师的讲授带来很大影响。本文从防御入手,论述...
  • Galdys
  • Galdys
  • 2013年03月21日 15:25
  • 951

编写高质量代码:改善java程序的151个建议

明白事理的人使自己适应世界,不明白事理的人想让世界适应自己。 -------萧伯纳 1)不要在常量和变量中出现易混淆的字母 2)莫让常量蜕变成变量 3)三元操作符的类型务必一致...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:感慨:编写坚固的代码
举报原因:
原因补充:

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