Effective C++ 学习总结
摒弃C的做法采用C++的实现方式
- 以const和inline代替define
- 以iostream流代替stdio
- 以new和delete代替
- C++风格注释
内存管理
- new和delete, new[] delete[]
- 析构函数要销毁掉类的动态内存分配,防止内存泄漏
7-10其他问题
构造、赋值、拷贝构造
11.初始化时的=表示拷贝构造,其他时候表示赋值运算符。如果在class中有动态的内存分配,则不能使用默认的拷贝构造和赋值预算法,需要重写。
12.尽量用初始化代替函数类变量赋值:一是效率更高,二是const变量只能初始化而不能赋值。
13.构造函数的初始化顺序与类的成员变量定义的顺序相一致,目的是析构顺序与类的成员变量的构造顺序相反。如果不是按照这个顺序赋值,那么类需要其他的方式记录每个变量的赋值顺序,这样就增加了开销。
14.Base class尽量virtual function。
15-17 =运算符相关
类与对象
18.类的成员函数完整且最小化
19. member function non-member function和 friend function区别
20. 避免将data member放在public中,安全?
21. 尽可能使用const
22. 尽可能传递引用而不是传值:效率高?避免拷贝构造?
23. 函数重载与缺省参数的选择?
25. 避免对指针的类型的重载
26. 造成模棱两可的情况,比如:即使Base1、Base2的参数和返回值不一样,仍然会造成类型不匹配的问题。比如:
D d; d.dot //error 模棱两可
即使使用了private限制符仍会出错


27. 如果不想使用编译器默认生成的member function,那么可以显示的禁止它,比如赋值运算符=,将其直接声明为private即可。这一点与Google编程指南倒是很相似。
28. 命名空间
31. 不要传回new的对象:无法析构和本地变量的引用:返回的时候被析构
35. 面向对象的public继承代表is-a的关系:比如:鸟之于鸡,动物之于爬行动物之类的关系
37. 将子类需要重写(覆盖)的函数声明为虚函数,以实现RTTI
38. 虚函数不能有默认参数:因为默认参数会静态绑定,而虚函数是动态绑定
39. 不要向下转型
40.用has-a 实现层次关系,比如计算机包括CPU主板 内存等部分,这些类都是计算机的组成部分,而不能说是计算机继承了这些class.反倒是可以说计算机继承了单片机。这些类的成员变量和普通的局部变量一样,会自动析构而不用手动delete
Effective C++ 学习总结的更多相关文章
- Effective STL 学习笔记 39 ~ 41
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value
Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...
- Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...
- Effective STL 学习笔记 32 ~ 33
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 30: 保证目标区间足够大
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...
- Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor
Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...
- Effective STL 学习笔记: Item 22 ~ 24
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...
- Effective STL 学习笔记 Item 21:Comparison Function 相关
Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...
- Effective STL 学习笔记:19 ~ 20
Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
随机推荐
- jsp 相关特性
下面要注意一个问题,“只要浏览器关闭,session就消失”,那么这个论断是否正确呢?对于session除非程序通知服务器删除一个 session,否则服务器会一直保留,程序一般都是在用户做log o ...
- Golang项目目录结构组织
其实golang的工程管理还是挺简单的,完全使用目录结构还有package名来推导工程结构和构建顺序. 当然,首先要说的是环境变量$GOPATH,项目构建全靠它.这么说吧,想要构建一个项目,就要将这个 ...
- poj 1459 Power Network【建立超级源点,超级汇点】
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 25514 Accepted: 13287 D ...
- [置顶] 使用U盘安装ubuntu系统
使用U盘安装ubuntu系统 在网上找了很多教程,都不起效,提示:“从光盘上读取数据出错”. 总结出了几个关键点. 首先,版本,Ubuntu 12.04 Server,一般的U盘安装都会报:“从光盘上 ...
- WEB API 用MemoryStream流做下载功能
刚开始把MemoryStream 放在 var streamResult = new MemoryStream(); HttpResponseMessage response = new HttpRe ...
- jbpm与spring hibernate struts整合
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- STM8S TIM4库函数应用
void TIM4_TimerInit(u8 Timer4Time) { assert_param(IS_TIM4TIMERTIME_OK(Timer4Time)); TIM4_DeInit();// ...
- swap函数的例子
13.31为你的HasPtr类定义一个<运算符,并定义一个HasPtr的vector为这个vector添加一些元素,并对它执行sort.注意何时会调用swap. #include<iost ...
- java中最简单的方式新起一个线程
启动一个线程在一个方法中启动一个线程,有两种方法第一种是让类实现Runable接口,这样的话编译器就会提示你实现里面的未实现的方法(就是run方法)第二种是,现在方法中new一个线程,然后直接调用他的 ...
- 合并两个vectcor——2013-08-26
vector<int> v1; vector<int> v2; for(int i=0; i<5; i++) { v1.push_back(i); if(i%2==1) ...