C++为4个次语言组成,分别为:
C:预处理器,若需C的高效则摒弃以下元素: 模板,异常,重载
Object Oriented C++
Template C++:范型编程部分,模板元编程(TMP)
STL:容器,迭代器,算法,函数对象
条款2:const常量使用
1.类成员中的静态常量: static const int Number = 5;//这是声明,如果编译器强制需要定义,则在下方加上如下定义const int Number;
2.对于单纯常量使用const代替#define,使用内联模板函数代替宏形似函数的宏
条款3: const常量关键词
1.TextBlock tb;与const Textblock ctb;的类型是不一样的
2.使用mutable关键字来令成员变量在const成员方法中可被改变
条款5: 拷贝构造函数
1.编译器默认创建的析构函数为non-virtual的,若想要派生类能调用自己的析构函数,就需要手动创建基类析构函数
2.默认拷贝构造函数与默认拷贝赋值操作只将non-static成员逐一赋值到对应变量上
3.你必须自己编写拷贝赋值操作来支持在内涵引用成员变量的类中支持赋值操作。
条款6: 拷贝构造函数-拷贝赋值操作-编译器默认函数
1.将成员函数声明为private的,且不去定义,可以禁止编译器生成默认的拷贝构造函数等,且不允许其他成员调用
2.可以编写一个专门用于阻止编译器自动生成默认函数的基类,这样在需要“声明其为private”的时候继承这个类就可以了
条款7: 基类-多态-虚函数
1.代多态性质的基类应该声明一个virtual析构函数,如果一个类有virtual函数,则应该将其析构函数声明为virtual
2.如果类不是为了具备多态而设计的则不应该有任何virtual函数
条款8: 析构函数-异常
1.不应该在析构函数中做一些可能会抛出异常的操作,因为一旦抛出异常,将没有处理的余地,以及导致一些不明确的行为。
条款9: 构造-析构过程- 虚函数
1.不要再构造过程以及析构过程中调用虚函数,因为此时不会有多态行为产生。
2.你可以通过将虚函数改为非虚函数,令子类通过private static 方法在构造、析构时期传递参数给基类,以此避免虚函数设计
条款10: 约定俗称的操作符返回值
1.令operate=返回一个reference to * this,即 Widget & ....{ return * this }
条款11: 自赋值
1. 当函数操作多个对象,且其中有多个对象是同一个对象,确保其行为依然正确。 如operate=
条款12:
1.如果不使用编译器的拷贝赋值函数,则应该确保复制对象内的所有成员变量以及所有基类成分。
2.不要尝试以某个拷贝函数实现另一个拷贝函数。
条款13:
1、使用对象来管理需要归还的资源,比如使用智能指针管理一段堆空间,那么在智能指针生命周期结束时,他的析构函数将自动delete所管理的堆空间。
2、常用的智能指针通常是shared_ptr
条款17:函数参数执行顺序带来的资源泄露
1、以独立语句将new出来的对象放入智能指针
2、例子:processWidget(shared_ptr( new widget), priority())
new widget多数情况会最先被执行,但如果接下来被执行的是priority方法,并且抛出了一个异常,那么shared_ptr的构造方法可能不会执行,那么就丢失了资源,无法回收。
阅读(604) | 评论(0) | 转发(0) |