- 博客(14)
- 收藏
- 关注
原创 Effective C++学习笔记 (14)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 在资源管理类中小心copying行为 对于上一条款所讲的RAII(资源取得时便是初始化时机)原则,本条款对于资源管理类的拷贝行为进行了说明,大概分为以下几种:在执行copy时采用深度拷贝,把管理类的资源也一起拷贝;禁止copy行为(将拷贝构造函数或者赋值运算符私有化);使用引用计数(shar
2012-09-11 00:03:44
152
原创 Effective C++学习笔记 (13)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 以对象管理资源 由于在写代码时很多时候需要用到资源,比如new一个对象之类的,这样一来资源的申请和释放需要程序员自己完成,对代码的逻辑需要谨慎设计,才能保证资源不会泄漏。 其实这类似的编程风格,在之前写C的时候也有编码规范来规定资源的释放,比如do while的运用啊,goto Exit0之类的方法,但是对
2012-09-10 23:34:33
473
原创 Effective C++学习笔记 (12)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 条款12:复制对象时勿忘其每一个成分 其实当我看到这个标题的时候我在想是不是说的深度拷贝的问题,但是我发现我想多了,毕竟这本书不是一本C++基础教程。该条款主要是针对在继承中,子类实现拷贝构造函数或者赋值运算符时,父类的成员变量没有初始化的问题。 首先还是看下代码吧。
2012-09-08 17:34:11
210
原创 Effective C++学习笔记 (11)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 在operator=中处理“自我赋值” 该条款首先提出了有可能出现自我赋值的情况,同时提出了几种可能存在的潜在自我赋值,然后通过解释了自我赋值可能出现的问题,以及如何解决“自我赋值”以及“异常安全性”这两类问题。 首先看一下以下的代码 这样运用赋值运算符没任
2012-09-08 17:32:13
258
原创 Effective C++学习笔记 (10)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 令operator=返回一个reference to*this 为什么要这么做呢?看个例子吧,如x = y = z = 1,这是一个赋值表达式,由于赋值表达式可以写成连锁形式,而且也是遵循右结合律的,所以在实现赋值运算符时都必须返回一个this的引用。其实这一条款说的有些教条化,但是这个需
2012-09-08 17:29:29
175
原创 Effective C++学习笔记 (9)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 条款9:绝不在构造函数和析构函数过程中调用virtual函数 当初面试遇到的面试题,后悔看完了,今天一看觉得当时回答的一塌糊涂。 先看代码吧。 汇编如下: 在父类的构造函数中调用output虚函
2012-09-05 23:03:28
146
原创 Effective C++学习笔记 (8)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 别让异常逃离析构函数 其实看完改条款我的理解不是很深,下来自己想了下还是有所领悟。为什么析构函数里最好不要抛出异常,其实原因可以这样理解,一个对象的析构函数是在该对象离开作用域之后调用的,所以这个时候不是所有的外部调用都会去处理这个异常的,如果没人处理那么很可能程序就crash了,出错了等
2012-09-05 22:05:12
178
原创 Effective C++学习笔记 (7)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 条款7:为多态基类申明virtual析构函数 其实该条款在任何一门C++课堂上老师都会讲到,把基类的析构函数申明为virtual的,这样一来在接口释放时候子类才能被正真析构。 1、 先来看看编译器是如何帮我们实现的,对于基类析构函数不为虚函数的情况 代码和编译生成的汇编如下:
2012-09-05 00:59:11
166
原创 Effective C++学习笔记 (6)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 若不想使用编译器自动生成的函数,就该明确拒绝 其实本条款讲的比较简洁,由于条款5说明了“默认构造函数”、“拷贝构造函数”、“复制运算符”这三个虽然用户不自己定义,但是用到的时候编译器还是会为它们生成代码,所以就导致了一些情况下, 用户不想提供拷贝构造函数,但是编译器默认生成了,解决这类问题主要
2012-09-04 00:56:46
162
原创 Effective C++学习笔记 (5)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 了解C++默默编写并调用哪些函数 在你编写一个空类的时候,C++其实为你默默编写了这几个函数:默认构造函数、拷贝构造函数、赋值运算符以及析构函数(非virtual的)。这几个函数只有当你需要时才会被编译器创建出来。 1、 实践代码如下: 汇编如下: 2、 对于
2012-09-04 00:54:13
189
原创 Effective C++学习笔记 (4)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 确定对象被使用前已先被初始化 讲述了几种对象的初始化的方法,如类的自定义成员变量、C++内置类型变量的初始化、继承中的成员变量初始化、static对象的初始化。 1、 对了类的成员变量初始化,建议在构造函数里使用初始化列表进行初始化,如果有赋值操作的话可以在构造函数内部完成。需要区分开“初
2012-09-04 00:36:47
488
原创 Effective C++学习笔记 (3)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 尽可能使用const 从const在变量、对象、函数参数、函数返回值、成员函数上都可以应用。 1、 在变量和对象上: A、constchar *p = “abc” //数据const,指针non const char * const p = “abc”
2012-09-04 00:32:06
208
原创 Effective C++学习笔记 (2)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 尽量以const、enum、inline、替换#define 1、#define在编译器之前先由预编译器做替换; 2、所以PDB里没有#define; 3、#define重复定义,出现多分,可能出现不同的值; 4、const存在类型检查; 5、const成员可以封装,比如在一个class里面定义一个st
2012-09-04 00:30:30
175
原创 Effective C++学习笔记 (1)
本人学习C++不精,故重新学习,点滴记录与大家分享,不足之处还望大牛多多指教。 视C++为一个语言联邦 主要把C++分为四个部分吧: 1、 C:一种支持过程形式、函数形式编程的语言; 2、 Object-OrientedC++:面向对象形式的语言; 3、 TemplateC++:泛型编程、模版元编程; 4、 STL:用STL代替了一类template程序库; 付:其实个人对3
2012-09-04 00:28:18
198
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人