null pointer,冲内存,内存泄漏,不成熟的优化, 这些程序员的禁忌之地,在我的第一个项目里面都丝毫不差的光顾了我.
记得中学时候,在一次重要考试之后,我发现我在一些诸如>,=,上面犯了大量的错误,尽管最后的大题做的非常好,但是最后的结果却让我很失望, 马虎, 割杀了我的辛苦付出,我出离愤怒的用圆规在手臂上刻下了>,=,+号,近十年过去了,今天仍然隐约可见.
而当我身在一个商业项目里的时候,周围的所有人在为项目不停付出的时候,我的不成熟的code,给全组造成了麻烦, 这种感觉绝对比努力之后的糟糕成绩严重得多.
第一次是我不知道,再犯就是我白痴!
静下心来,观看我的错误,可以分成两类: 代码流程类错误&态度类错误.
---------------------------------------------------------------------------------------------------------------------
null pointer&冲内存是源自我的低级错误, 这样的错误就应该由单元测试来搞定,我所在的项目里面还没有单元测试,一个类正确与否取决于coder的写和review,以及在整个项目里面的表现.
这样低级错误就有可乘之机, 代码的稳定性就不那么有保证.
针对各种情况来进行测试,并用跟踪内存组件来跟踪类在内存上的表现是否是正确无误的. 这种低级的可测内容就应该由测试来进行.
项目的规模越大,这种测试越应该给予注意,否则coder就要针对一个问题,在整个项目的范围里跟踪调试,因为代价高所以要花更大的力气来进行类稳定性安全性的保证--测试.
------------------------------------------------------------------------------------------------------------------
因为认识有限,所以我们时不时的遇到原来认为不可能的事情.
而思维懒惰和想当然则会放大人的无知.
我的不成熟的优化源自在某一函数功能上我进行了优化,是的,的确快了一些,但是它暗地里却把另一种优化禁掉了,结果导致整体性能的下降.
这个函数的影响是全局性的, 那么除了其自己外,全局的运行时间也应该得到注意.总有不知道或者忽略掉的事情, 务必对修改的东西所作用的范围内进行测试监控.
我是无知的,我的思维不能保证做到绝对完备的,所以我要谦卑的去面对我的程序.
冲内存就是无知又想当然的结果, 不成熟优化则是态度不够严谨的结果.
------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
最后是一个危险结构的修正:
这是段很不合理的代码,就是mType0由外来指针初始化, 然后test类在析构的时候释放mType0指向的内存.
简言之,就是在test外面, 函数new了内存但是却没释放, 而在test内部, 没有new却有释放.
这样内存的分配和释放就被割裂开,会把项目的内存复杂度提到新的境界--这是个很不好的结构.
最好使用factory来做这个:
这样内存操作就被封到test里面,外界不用管arg的分配, 所有分配/释放工作都是在test class中内部进行.