C++学习方法论
2018-09-29 本文已影响0人
m风满楼
从别人摘录的学习方法论:自己记录一下,慢慢体会
- C++ 好书很多,不过优秀的 C++ 开源代码很少,而且风格迥异 37。我这里按个人口味和经验列几个供读者
参考阅读: Google 的 protobuf、 leveldb、 PCRE 的 C++ 封装,我自己写的 muduo网络库。这些代码都不长,功能明确,阅读难度不大。如果有时间,还可以读一读Chromium 中的基础库源码。在读 Google 开源的 C++ 代码时要连注释一起细读。我不建议一开始就读 STL 或 Boost 的源码,因为编写通用 C++ 模板库和编写 C++ 应用程序的知识体系相差很大。另外可以考虑读一些优秀的 C 或 Java 开源项目,并思考是否可以用 C++ 更好地实现或封装之(特别是资源管理方面能否避免手动清理) - 什么是 C++ 编程中最重要的编程技法( idiom)?我认为是“用对象来管理资 源”,即 RAII。资源包括动态分配的内存 41,也包括打开的文件、 TCP 网络连接、数 据库连接、互斥锁等等。借助 RAII,我们可以把资源管理和对象生命期管理等同起 来,而对象生命期管理在现代 C++ 里根本不是困难(见注 5),只需要花几天时间熟 悉几个智能指针 42的基本用法即可。学会了这三招两式,现代的 C++ 程序中可以完 全不写 delete,也不必为指针或内存错误操心。现代 C++ 程序里出现资源和内存泄 漏的惟一可能是循环引用,一旦发现,也很容易修正设计和代码。这方面的详细内容 请参考《 Effective C++ 第三版》第 3 章资源管理。
C++ 是目前惟一能实现自动化资源管理的语言, C 语言完全靠手工释放资源,而 其他基于垃圾收集的语言只能自动清理内存,而不能自动清理其他资源 43(网络连 接,数据库连接等等)。 - 除了智能指针, TR1 中的 bind/function 也十分值得投入精力去学一学 44。让 你从一个崭新的视角,重新审视类与类之间的关系。 Stephan T. Lavavej 有一套 PPT 介绍 TR1 的这几个主要部件 45。
- 第二本书,如果读者还是在校学生,已经学过数据结构课程 46,可以考虑读一读,第二本书,如果读者还是在校学生,已经学过数据结构课程 46,可以考虑读一读《泛型编程与 STL》 47;如果已经工作,学完《 C++ Primer》立刻就要参加 C++ 项目 开发,那么我推荐阅读《 C++ 编程规范》 48泛型编程有一套自己的术语,如 concept、 model、 refinement 等等,理解这套 术语才能阅读泛型程序库的文档。即便不掌握泛型编程作为一种程序设计方法,也要 掌握 C++ 中以泛型思维设计出来的标准容器库和算法库( STL)。坊间面向对象的书 琳琅满目,学习机会也很多,而泛型编程只有这么一本,读之可以开拓视野,并且加 深对 STL 的理解(特别是迭代器 49)和应用