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; ...
随机推荐
- Storm系列(十)聚流示例
功能:将多个数据源的数据汇集到一个处理单元进行集中分类处理: 入口类TestMain 1 ; i < size; i++) { 31 content += input ...
- CentOS设置在同一窗口打开文件夹
默认情况下,CentOS双击文件夹会打开一个新窗口.这对于习惯Windows的用户会感觉非常别扭.其实,如果用鼠标中键双击文件夹,就不会打开新窗口了.当然,也可以按照如下设置: 1. 打开任意一个文 ...
- json.net json转换神器
json.nethttps://json.codeplex.com/ api documenthttp://james.newtonking.com/json/help/index.html#
- hdu 01背包汇总(1171+2546+1864+2955。。。
1171 题意比较简单,这道题比较特别的地方是01背包中,每个物体有一个价值有一个重量,比较价值最大,重量受限,这道题是价值受限情况下最大,也就值把01背包中的重量也改成价值. //Problem : ...
- JQuery简单实现锚点链接的平滑滚动
在平时的项目中,我们经常需要一些特效链接,如果使效果进一步加强,我们可以使点击锚点链接平滑滚动到锚点,下面就来给大家讲解下如何使用jQuery来实现. 一般使用锚点来跳转到页面指定位置的时候,会生 ...
- 开发日志_Jan.8.2017
这两天继续着手开发碰撞部分. 主要工作是写碰撞类和运动线程类.碰撞主要在于算法,运动线程只要管理好就行了. 之前碰撞测试中(即还未添加完整碰撞算法时)遇到各种bug,疑似机器人和小球的定位点不明所造成 ...
- Asp.net Mvc 自定义Session (一),
大家都知道用系统默认的session 会存在这样的问题 如果用户过多的话 session 会自动消亡,而且不能支持分布式和集群. 这系列博客主要讲解 怎样 解决用户过多的session自动消亡,和分 ...
- JavaScript的递归之更多例子
更多例子 第二个递归的例子是求两个自然数的最大公约数(有没有回到令人怀念的中学时代).下面的程序用的是经典的辗转相除法. //greatest common divisor //假定a.b都是正整数 ...
- LINQ to JavaScript
JSLINQ 是一个将LINQ对象转化为JavaScript对象的工具 .它是构建在JavaScript的数组对象的基础上进行转换的,如果您使用的是一个数组,你可以使用LINQ到javascript ...
- CAS认证(3):验证用户信息
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...