C/C++编程的现代习惯

标签: C/C++语言编程 | 发表时间:2015-05-05 14:39 | 作者:ideawu
出处:http://www.ideawu.net/blog

相对于汇编语言是一门操作 CPU 寄存器的语言, C/C++ 是一门操作内存的语言, 这是传统的观点. 但现代的程序应用开发, 大多是把 C/C++ 当作一门应用层语言, 所以必须适当地减少对内存的关注. 这也是本文所要讲的 - C/C++ 编程的现代习惯.

1. 不要害怕返回结构体和类的实例

在一些古董级的编程书里, 你绝对看不到返回结构体或者类的实例, 它们告诉你"不能返回局部变量的内存". 事实上, 返回结构体(类)的实例, 并不是把局部变量的内存(指针)返回给调用者使用, 而把局部变量复制到调用者栈上的内存. 而且, 很多情况下编译器会优化, 根本就不会发生内存拷贝.

返回结构体(类)的实例, 比返回 malloc() 分配的内存的指针在实践上具有更多的优势, 既能使代码更清晰, 也可以完全避免内存泄漏.

2. 不要害怕传递 STL 的 string

无论你把 STL 的 string 作为函数返回值还是参数, 都永远不要担心内存拷贝的问题, 永远不要! string 经过了良好的优化, 并且具有写时拷贝特性, 你将 string 传来传去, 就跟整数赋值的成本差不多. 相信我, 你可以这样认为.

3. 利用 string 来减少显式的内存分配和释放

STL 的 string 几乎可以完全替代 malloc/free 内存操作. 它有写时拷贝的特性, 它有自动扩大的特性, 你完全可以在许多场景用它来替代显式的内存分配, 而且利用它在退出作用域时自动释放内存的语言特性(和某些自动锁类似), 避免了内存泄露的可能性.

4. 记住, STL 的 string 不是字符串!

记住, string 不是字符串, 它是一段内存, 内存中的每一个字节可以是任意值, 多个 '\0' 字符也可以出现在 string 中. 只有当你调用了它的 c_str() 方法, 它才和 C 语言的字符串有联系, 在你调用 c_str() 之前, 记住, string 不是字符串!

5. 你要理解代码导致内存的变化, 但不要被内存限制

C/C++ 语言是一门操作内存的语言, 这是永远的基础. 你必须理解你的每一行代码导致的内存的变化, 这样你才能正确地进行 C/C++ 编程. 但是, 理解你的业务, 快速地封装出内存相关的核心代码, 然后把内存忘记.

Related posts:

  1. 小心 int 乘法溢出!
  2. 使用 jemalloc 编译过程出错的问题
  3. 编写JSP/PHP+MySQL留言本
  4. SSDB 使用 jemalloc
  5. 百行代码实现一个简单的Zset(SortedSet)

相关 [编程 现代 习惯] 推荐:

C/C++编程的现代习惯

- - idea's blog
相对于汇编语言是一门操作 CPU 寄存器的语言, C/C++ 是一门操作内存的语言, 这是传统的观点. 但现代的程序应用开发, 大多是把 C/C++ 当作一门应用层语言, 所以必须适当地减少对内存的关注. 这也是本文所要讲的 - C/C++ 编程的现代习惯.. 在一些古董级的编程书里, 你绝对看不到返回结构体或者类的实例, 它们告诉你"不能返回局部变量的内存".

9条编程带给程序员的坏习惯;

- Shan - 考据癖
*  具备一定编程基础或计算机基础知识的人群才能会心一笑. *  请各位视自身情况筛选阅读.. 如果你是一个程序员, 或者你就读计算机相关专业, 那么你应该能理解下面这些诡异的小习惯是怎么养成的, 或者你本身就有着其中的某些习惯:. 例: 程序员吵架的时候会说: “我数三下, 你再不闭嘴我就不客气了.

代码审查和不良编程习惯

- - 外刊IT评论网
有时候,做为一个程序员,我觉得我的职业生涯会被我开发软件使用的开发工具和技术架构明显的分割成几个阶段. 一部分是因为使用的编程语言——在大学时是 Smalltalk,在Gog Creek公司是C#和Python,而另一方面是开发工具. 我在Fog Creek公司里工作了8年,在那里,我们有一个非常固定的技术架构:bug管理、客户支持和文档管理用 FogBugz;开发管理用 Trello;代码审查用 Kiln;版本控制用 Mercurial;编码用Vim和 Visual Studio ;持续集成用我们的内部工具Mortar;随着时间的流逝,这些工具在慢慢的变化,但变化从来都是缓慢逐步的,一个组件一个组件的.

杂谈现代高级编程语言

- 卡飞菲 - Yi Wang's Tech Notes
几个月之前,Slashdot转载了Robert Harper教授的一篇博客,说卡内基梅隆大学计算机系把”面向对象编程“从大一新生的必修课中删掉了,其原因是. 这两个原因(anti-modular和anti-parallel)都是很重的指责了;尤其是anti-modular,因为OO的基本思想通常被理解成“封装”,从而实现模块化.

程序员:编程给你现实生活带来了哪些坏习惯

- 赵星云 - cnBeta.COM
似乎任何职业都会给从业人员带来这样那样的习惯. 国外某网站上有位朋友(应该也是程序员)想了解其他程序员在投身堆码事业后有什么样的坏习惯. 结果一呼百应,很多程序员纷纷自爆自己的坏习惯和糗人糗事. 编程无国界,相信国内堆码界的朋友,也会有同感.

纠正你的Qt编程习惯:主窗体的创建问题

- 三十不归 - CuteQt Blog
题记: 要知道,并不是只有初学者才会犯错. 最近发现了一些有意思的问题,值得memo一下. 大家看得出这段代码中的问题吗. (呵呵,不要告诉我是cuteqt不能访问哦~). 这段代码ms十分标准, 非常符合笔者平时写Qt程序书写main函数的习惯, 孰料想竟然是个错误的习惯,而且问题很严重哦. 给个提示:在程序退出时会aborted.

思维习惯

- 冬虫夏草 - 译言-每日精品译文推荐
You see the reality through a particular lens formed by your beliefs therefore each individual sees the same situation in a different way.. 你的思维习惯影响着你生活的方方面面.

5步养成新习惯

- bhunter - 译言-每日精品译文推荐
来源5 Steps to Create a New Habit | zen habits. “你对世界的净值通常取决于去除你的坏习惯之后,剩下的部分. 决定戒烟的时候,我27岁,两个大女儿分别是7岁和5岁,那对双胞胎3岁. 我不想成为一个坏榜样,我从不当着他们的面抽烟. 在他们睡觉或者和保姆在一起的时候我才会抽.

「习惯」不时,不食。

- 可可 - 下厨房
中国饮食文化博大精深,“不时不食”是精髓所在. 圣人孔子有非常严谨的饮食态度:“色恶不食,臭恶不食”,即腐败的食物不要吃,颜色不对的不要吃,味道不正的不要吃——只吃新鲜的食物,而且要色香味俱全. 孔子还说:“肉虽多,不使胜食气. 粮食是最养生的食物,肉类菜类只是搭配. 这个观点越来越被现代营养学界认同.

阅读习惯推荐

- - 七零后CFO
前几天,看到一篇文章《 不阅读的中国人》,作者描述了自己在长途飞行过程中的见闻:. 长途飞行中的睡眠时间,机舱已熄灯,我蹑手蹑脚地起身去卫生间. 座位离那里比较远,我穿过很多排座位,吃惊地发现,我同时穿过了很多排iPad. 不睡觉玩iPad的,基本上都是中国人,而且他们基本上都是在打游戏或看电影,没见有人读书.