分类: WINDOWS
2009-05-28 18:37:22
templateinline void destroy(T*& p) { delete p; p = 0; }
这个绿色的,无污染无公害不需冷藏也没有防腐剂的小模板应该添加到每个C++程序员的工具箱里. 我记得在公司内部讨论编程风格时提到过, 最好在delete一个指针之后, 把它置为NULL, 这样再次delete这个指针时它仍是安全的. 误用被delete之后的指针也能得到最快的负面反馈(程序如果真有错误, 早出错比晚出错好). 但是, 没有讨论出来应该怎么做, 只是简单提了一下, 可以用模板, 但又略有疑惑对于 delete[] 还得有一个对应的版本.
只建议一个好的做法, 而不给出怎么做时, 或者别人做起来很不方便时, 这件事就不会被执行, 至少这是一般人的行为习惯.
所以, 以后类似这样的空谈讨论会最后都要落实到: 怎么做, 再进一步, 需要落实到: 怎么检查漏做/做错, 再进一步, 怎么自动检查和自动通知漏做/做错. 后两步我们在实践中对于一些容易检测的问题已经可以通过CVS服务器端的自动检查和vc中集成pc-lint实现. 只不过, 目前所能检查的问题只是极小的一部分.
对于需要delete[]的情况, 可以照样学样:
template inline void destroy_array(T*& p) { delete[] p; p = 0; }
是的, 它是只节省了一句话, 而且仅从名字destroy还看不出它会把p置 0, 但是对这种日常必需品, 项目组里每个人应该一加入项目就熟悉它, 而不是每次都得看它的具体定义才能使用. 虽然只是1/2 的代码行. 还是坚持勿以善小而不为.
总之, 这玩艺儿我收藏了.