Effective C++学习笔记
文章平均质量分 81
《Effective C++改善程序与设计的55个具体做法》学习笔记
班公湖里洗过脚
上马击狂胡,下马草军书
展开
-
9.杂项讨论 Miscellany
欢迎来到大杂烩的一章。本章只有3个条款,但千万别被低微的数字或不迷人的布景愚弄了,它们都很重要!第一个条款强调不可以轻忽编译器警告信息。至少,如果你希望你的软件有适当行为的话,别太轻忽它们。第二个条款带你综览 C++标准程序库,其中覆盖由TR1引进的重大新机能。最后一个条款带你综览 Boost,那是我认为最重要的一个C++泛用型网站。如果你尝试写出高效 C++软件,却没有参考这些条款所提供的信息,那么充其量也只是一场事倍功半的恶战。原创 2014-04-16 20:12:18 · 2177 阅读 · 1 评论 -
8.定制new和delete Customizing new and delete
当计算环境(例如Java和.NET)夸耀自己内置“垃圾回收能力”的当今,C++对内存管理的纯手工法也许看起来有点老气。但是许多苛刻的系统程序开发人员之所以选择C++,就是因为它允许他们手工管理内存。这样的开发人员研究并学习他们的软件使用内存的行为特征,然后修改分配和归还工作,以求获得其所建置的系统的最佳效率(包括时间和空间)。这样做的前提是,了解 C++内存管理例程的行为。这正是本章焦点。原创 2014-04-14 09:47:24 · 1394 阅读 · 1 评论 -
7.模板与泛型编程 Templates and Generic Programming
C++templates的最初发展动机很直接:让我们得以建立“类型安全”(type-safe)的容器如 vector,list和 map。然而当愈多人用上 templates,他们发现templates有能力完成愈多可能的变化。容器当然很好,但泛型编程(generic programming)——写出的代码和其所处理的对象类型彼此独立——更好。S T L算法如for_each,find和 merge就是这一类编程的成果。最终人们发现,C++template机制自身是一部完整的图灵机原创 2014-04-12 11:22:59 · 1534 阅读 · 1 评论 -
6.继承与面向对象设计 Inheritance and Object-Oriented Design
面向对象编程(OOP)几乎已经风靡两个年代了,所以关于继承、派生、virtual函数等等,可能你已经有了一些经验。纵使你过去只以C编写程序,如今肯定也无法逃脱OOP的笼罩。尽管如此,C++的OOP有可能和你原本习惯的OOP稍有不同:“继承”可以是单一继承或多重继承,每一个继承连接(link)可以是public,protected或private,也可以是virtual或non-virtual。然后是成员函数的各个选项:virtual?non-virtual?pure virtual?以及成员函数和其他语言特原创 2014-04-11 20:00:46 · 1045 阅读 · 1 评论 -
5.实现 Implementations
大多数情况下,适当提出你的classes(和class templates)定义以及functions (和function templates)声明,是花费最多心力的两件事。一旦正确完成它们,相应的实现大多直截了当。尽管如此,还是有些东西需要小心。太快定义变量可能造成效率上的拖延;过度使用转型(casts)可能导致代码变慢又难维护,又招来微妙难解的错误;返回对象“内部数据之号码牌(handles)”可能会破坏封装并留给客户虚吊号码牌(dangling handles);未考虑异常带来的冲击则可能导致资源泄原创 2014-03-28 11:49:31 · 734 阅读 · 1 评论 -
4.设计与声明 Designs and Declarations
所谓软件设计,是“令软件做出你希望它做的事情”的步骤和做法,通常以颇为一般性的构想开始,最终演变成十足的细节,以允许特殊接口(interfaces)的开发。这些接口而后必须转换为 C++声明式。本章中我将对良好 C++接口的设计和声明发起攻势。我以或许最重要、适合任何接口设计的一个准则作为开端:“让接口容易被正确使用,不容易被误用”。这个准则设立了一个舞台,让其他更专精的准则对付一大范围的题目,包括正确性、高效性、封装性、维护性、延展性,以及协议的一致性。原创 2014-03-22 14:23:14 · 1429 阅读 · 1 评论 -
3.资源管理 Resource Management
本章一开始是一个直接而易懂且基于对象(object-based)的资源管理办法,建立在C++对构造函数、析构函数、copying函数的基础上。经验显示,经过训练后严守这些做法,可以几乎消除资源管理问题。然后本章的某些条款将专门用来对付内存管理。这些排列在后的专属条款弥补了先前一般化条款的不足,因为管理内存的那个对象必须知道如何适当而正确地工作。原创 2014-03-20 08:46:41 · 1450 阅读 · 1 评论 -
2.构造/析构/赋值运算 Constructors,Destructors,and Assignment Operators
几乎你写的每一个 class 都会有一或多个构造函数、一个析构函数、一个 copy assignment 操作符。这些很难让你特别兴奋,毕竟它们是你的基本谋生工具,控制着基础操作,像是产出新对象并确保它被初始化、摆脱旧对象并确保它被适当清理、以及赋予对象新值。如果这些函数犯错,会导致深远且令人不愉快的后果,遍及你的整个 classes。所以确保它们行为正确是生死攸关的大事。本章提供的引导可让你把这些函数良好地集结在一起,形成classes的脊柱。原创 2014-03-18 11:27:58 · 3994 阅读 · 1 评论 -
1.让自己习惯C++Accustoming Yourself to C++
不论你的编程背景是什么,C++都可能让你觉得有点儿熟悉。它是一个威力强大的语言,带着众多特性,但是在你可以驾驭其威力并有效运用其特性之前,你必须先习惯C++的办事方式。本书谈的便是这个。总有某些东西比其他更基础些最近因为工作需要,做了个视频播放器,能播放目前绝大多数格式,也能播放流媒体文件,界面是用Qt做的,这个项目能在maclinuxwindows等平台编译运行,采用的是C++语言和C++的GUI库Qt调用开源项目VLC提供出来的SDK,VLC是一个开源的视频播放器,比较牛,没听过的朋原创 2014-03-17 12:06:50 · 4409 阅读 · 1 评论