- 博客(17)
- 资源 (4)
- 收藏
- 关注
原创 Effective C++之十二
核心思想:Copy构造和赋值操作中,复制对象的所有部分。设计良好的类封装了内部状态,只有两个复制函数:Copy构造函数和赋值操作函数。条款5中谈了编译器合成的复制函数。当类中声明了Copy构造函数和赋值操作函数,即使有明显逻辑错误,编译器也不会报错。Mayers举了Customer类的例子:如果类中增加了新的成员变量,而没有更新相关复制函数,复制函数只复制对象的部分。有继承时问题更隐蔽
2008-11-24 07:08:00 226
原创 社交网站
自博客、微博客之后,社交网站成为新的流行,据说Facebook帮奥巴马成功笼络了250万网民。现在社交网站又向垂直领域发展,小鸡射手下载了倾向于教育领域的开源系统Elgg,学习学习,:-) 也许是文化背景的因素,国人还是喜欢国内的品牌。国内有以大学生为主体的校内网,以休闲为主的开心网,以交友分享为主的51网,和依托生活服务平台的雅虎关系等等。 平
2008-11-23 09:48:00 272
原创 Effective C++之十
要点: 赋值操作返回*this的引用。 其作用是支持连续赋值,例如:x = y = z = 15; 这只是一种惯用法(convention),如果不这么写编译还是能通过的。 最后,除了标准赋值操作外,其他赋值操作(+=、*=等等)均适用。
2008-11-22 18:53:00 205
原创 Effective C++之九
要点:不要在构造/析构函数中调用虚函数。 原因是: 1) 子类构造函数首先调用基类构造函数,故在运行基类构造函数时,子类成员变量尚未初始化 2) 更重要的是,在调用基类构造函数时,对象的类型是基类类型。不但虚函数认为(resolve to)基类函数,运行时类型(Runtime Type Information)也认为是基类。 析构函数也是同
2008-11-22 16:16:00 195
原创 Effective C++之八
要点:不要在析构函数中抛出异常。 Mayers举了一个Widgets vector例子:如果第一个元素的析构函数中抛出了异常,为了避免资源泄漏等问题,其他元素也需要析构,假设第二个元素的析构函数又抛出一个异常。C++无法同时处理两个异常,将导致未知行为甚至程序终止。 补充一个例子:函数执行中抛出异常,退出该函数前将析构所有局部对象。如果在析构局部对象时又抛出异常,也将面
2008-11-22 15:56:00 213
原创 Effective C++之六
要点:显示禁止不想使用的编译器合成函数。 条款5中叙述了编译器可能合成四类函数。在某些情况下,如作者例子中“要出售房屋”实例,不希望有Copy构造和赋值操作。补充例子:Singleton模式。 有两种做法: 1) 将Copy构造和赋值操作声明为private,不提供函数实现。 1.1 声明Copy构造和赋值操作后,编译器不会再合成
2008-11-22 13:27:00 221
原创 Effective C++之五
重点:了解C++自动合成和调用的缺省构造、Copy构造、赋值和析构函数。 即使你定义了一个空类,C++编译器也会为你生成上述函数。准确地说,是在需要的时候生成。见而言之,它们做以下工作: - 缺省构造和析构,调用基类和成员对象的缺省构造和析构函数 - copy构造和赋值操作,简单地复制每一个成员对象的值。对于基本类型,就是bitwise复制。
2008-11-15 12:51:00 237
原创 Effective C++之四
核心思想:对象使用前必须初始化。 C++对象初始化没有简明的规则。大致而已,出于效率考虑,C++的C部分(参见条款1)不保证进行初始化,而非C的部分能保证初始化。读取未初始化的随机值,将导致未定义的行为,包括程序异常退出。 最好的做法是:在使用前永远进行初始化,对内置数据类型进行手工初始化。 对于对象而已,初始化的职责落在构造函数上。成员变量初始化
2008-11-15 11:30:00 261
原创 编码的三个要求
也许是受了《重构》的影响,我对年轻同事编码提的三个要求是: 1. 给函数、变量取一个恰如其分的名字 2. 写短的函数 3. 不要重复。 易懂却不易做。
2008-11-15 11:21:00 404
原创 历史与现状
Martin Fowler在其《企业架构模式》中推荐了Craig Larman的《UML和模式应用》。此书已经是第三版了,从网下载了一本英文电子版,阅读速度实在太慢,于是到chinapub定了一本中文版。值得一提,也许是电子商务有了进一步发展,无论是chinapub,新蛋或是京东,送货的速度明显比以前快了。 谈到迭代开发方法的历史,Larman是这样叙述的:20世纪50年
2008-11-06 21:15:00 236
原创 w3school导读
弟弟,给了w3school的网址,再为你写一份入门导读。Effective C++等你放假再看,先阅读C++ Primer,:-) 建议以下顺序学习: 1. HTML 这是静态网页的最基础表示方法。网页是一种叫标记(tag)的树型结构。例如: - 根标记为 - 显示图片用 - 显示可以点击的链
2008-11-02 11:41:00 344
原创 Effective C++之三
主题:尽可能使用const。 const运用范围很广:全局常量、类内常量、静态常量、输入参数常量、返回值常量、函数常量。声明为常量后,编译器会检查其常量性。对指针,const可用于说明指针本身、指针指向内容、两者都是常量。对指针指向内容的cosnt,C++语法支持两种语法(参见Widget例子);我个人习惯于写在左边,但是考虑到写template时的一致性,《C++ Temp
2008-11-02 10:31:00 418
原创 Effective C++之二
第二条的内容记忆得就不如第一条丰富了,:-) 核心思想:不要使用#define! 一般的,#define有两个用途:1. 定义常量,2.定义常用操作,例如max(a,b)。 #define用途一的替代方案是:const变量。好处一是:宏定义是预编译处理的,只是做简单的文本替换,宏定义token不在编译符号表支持,而const能在编译期检查类型。好处二是,C
2008-11-02 10:05:00 318
原创 Pclint统计小工具
Pclint是一个很不错的C/C++静态分析工具。 用Ruby写了一个统计小工具,统计每个子目录、文件中错误/告警数,各类错误/告警总数。 功能还比较单纯,期望未来能记录数据库,并结合PSP概念,成为更有效的工具。 没有找到上传文件的地方,可留下email。
2008-11-02 09:03:00 570 1
The Art of Scalability
2010-01-15
Java Persistence with Hibernate
2007-02-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人