effective c++
2019独角兽企业重金招聘Python工程师标准>>>
- 条款1:视C++为一个语言联邦:C、Object-Oriented C++、Template C++、STL
对于内置类型pass-by-value 比pass-by-reference高效,用户自定义类型pass-by-reference-to-const更好
STL中迭代器和函数对象都是在C指针的基础上塑造出来的,所以旧式的C pass-by-value再次试用
- 条款2:尽量以const,enum,inline替换#define
1、对于单纯的常量,最好以const对象或enums替代#define
2、对于形似函数的宏,最好用inline函数替代#define
因为使用的#define 的变量未进入编译器的记号表(symbol table)
#define ASPECT_RATIO 1.63 ==>const double AspectRatio = 1.63
- 条款3:尽可能使用const
void f1(const Widget* pw) <=> void f2(Widget const *pw) //等价,f1/f2获得一个指针,指向一个常量的(不变的)Widget对象
- 条款4:确定对象使用前已被初始化。
对内置类的对象进行手工初始化,因为C++不保证初始化它们。
构造函数最好使用成员初值列,而不要在构造函数内使用赋值操作。前者效率更高,后者要先调用 default构造再赋值
为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象。????
- 条款5:了解C++默默编写并调用哪些函数。
9、编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。是 public且 inline 的
10、当手工创建一个构造函数后,编译不会再创建default构造函数。
11、内含引用或const成员,编译器不会创建copy assignment操作符。
class Empty{}
==》
class Empty{public:Empty(){} Empty(const Empty& rhs){}~Empty(){} Empty& operator=(const Empty& rhs){} //拷贝复制函数
}
- 条款6:若不想使用编译器自动生成的函数,应该明确拒绝。
12、为驳回编译器自动提供的技能,可将相应的成员函数声明为private并且不予实现。
- 条款7:为多态基类声明virtual析构函数。
13、polymorphic带有多态性质的base classes 应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。当子类以父类指针的形式被析构时,子类对象的成分没有被销毁,故需要将父类的析构函数需要为virtual
14、Classes的设计目的如果不是作为base classes使用,或不是为了具备多态性,就不应该声明virtual析构函数。
15、若父类带有pure virtual(纯虚函数)时,子类的析构函数中会有对父类析构函数的调用,因此必须为父类的纯虚函数提供一份定义。
- 条款8:别让异常逃离析构函数。
16、析构函数绝对不要吐出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不再传播)或结束程序。
17、如果客户需要对某些操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非析构函数)执行该操作。
- 条款9:绝不在构造和析构过程中调用virtual函数。
18、子类构造时,先调用base class,此时子类被认为是一个base class。析构时先调用自身的析构函数,再调用base class的析构函数。
- 条款10:令operator= 返回一个reference to *this。
Widget& operator=( constWidget& rhs){... return* this;}
- 条款11:在operator=中处理“自我赋值”
20、确保当对象自我赋值时operator=有良好的行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap。
21、确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。
条款12:复制对象时勿忘其每一成分。
资源管理:
- 条款13:以对象管理资源。
25、以对象管理资源的两个关键想法:
(1)、获得资源后立刻放进管理对象。资源获取时机便是初始化时机。
(2)、管理对象运用析构函数确保资源被释放。
26、使用shared_ptr智能指针。
条款14:在资源管理类中小心copying行为。
转载于:https://my.oschina.net/u/347414/blog/2999366
effective c++相关推荐
- Effective C++ 50条款
Effective C++ 50条款 条款 1:尽量用 const 和 inline 而不用#define--尽量用编译器而不用预处理 #define max(a,b) ((a) > (b) ? ...
- [.NET] 《Effective C#》快速笔记 - C# 中的动态编程
<Effective C#>快速笔记 - C# 中的动态编程 静态类型和动态类型各有所长,静态类型能够让编译器帮你找出更多的错误,因为编译器能够在编译时进行大部分的检查工作.C# 是一种静 ...
- Effective STL 50条有效使用STL的经验笔记
Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...
- 《Effective C++》第8章 定制new和delete-读书笔记
章节回顾: <Effective C++>第1章 让自己习惯C++-读书笔记 <Effective C++>第2章 构造/析构/赋值运算(1)-读书笔记 <Effecti ...
- VirtualBox: Effective UID is not root
为什么80%的码农都做不了架构师?>>> 桌面上运行virtualbox出错: The virtual machine 'xp' has terminated unexpect ...
- Effective Java:对于全部对象都通用的方法
前言: 读这本书第1条规则的时候就感觉到这是一本非常好的书.可以把我们的Java功底提升一个档次,我还是比較推荐的.这里我主要就关于覆盖equals.hashCode和toString方法来做一个笔记 ...
- 第 3 次读 Effective Java,这 58 个技巧最值!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:Dong GuoChao <Effective ...
- Effective C++ 类与函数设计和申明
Effective C++ 类与函数的设计和申明 在看<Effective C++>这本书的过程中,我无数次的发出感叹,这他妈写得太好了,句句一针见血,直接说到点上.所以决定把这本书的内容 ...
- 量化网络训练--Towards Effective Low-bitwidth Convolutional Neural Networks
Towards Effective Low-bitwidth Convolutional Neural Networks CVPR2018 https://github.com/nowgood/Qua ...
- 卫星图像分割--Effective Use of Dilated Convolutions for Segmenting Small Object Instances
Effective Use of Dilated Convolutions for Segmenting Small Object Instances in Remote Sensing Imager ...
最新文章
- linux flush 保证 磁盘,linux cache介绍及控制
- WF(9):本地服务之事件处理
- web第6次作业position
- NSURLRequest详解IOS最基础的api
- 2018年网络规划设计师下午真题
- OneMap Client API
- Intellij mac快捷键
- MATLAB 程序暂停的方法
- 小红书怎么看关键词排名?如何提升笔记自然搜索排名
- Teigha的BlockTableRecord获取方法
- 【presto 】presto 新版本升级详情
- [OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-上...
- 如何混迹程序猿江湖,你得懂程序员黑话暗语!
- EXCEL仪表盘,可视化大屏,数据看板制作
- 《遥感原理与应用》总结——遥感图像自动识别分类
- 不用计算机算arctanx,arctanx等于什么(arctan计算器在线)
- C++ 模板与泛型编程简述
- 0.总也记不住的考场or竞赛必备stl各种用法及其他技巧
- IOS开发之微信山寨版
- CSS权重,属性书写顺序,布局技巧和网页布局总结,盒子模型排列位置---CSS