CAS机制
乐观锁却不这么想,但是资源只有一份,你乐观锁不加锁操作并不代表就可以直接访问资源而不管有没有人访问,所以乐观锁也有“加锁”机制,但是和悲观锁的行为不同。悲观锁是实际加锁和解锁来达到原子性,而乐观锁在正式更新数据之前会检查数据是否被其他线程改变过,如果未被其他线程改变过就将共享变量更新成最新值,如果发现共享变量已经被其他线程更新过了,就重试,直到成功为止。整个过程不涉及加锁和解锁操作,但却已实现原子性
谈一谈 RAII 技术
利用 C++ 局部对象离开作用域,自动调用析构函数的特点。RAII 让资源的生命周期和对象绑定,对象生命周期结束会带走资源。在构造函数中获取资源,要记得在析构函数中回收资源
关联式容器
只要弄清楚一个容器,其他的也就没什么好讲的
移动构造函数和移动赋值函数
看来移动语义和复制语义的根本不同点就是,移动语义是浅拷贝(改变指向),复制语义是深拷贝(重新 new)
拷贝赋值函数
拷贝构造函数是用一个已经存在的对象初始化一个正在创建的对象,而赋值运算符函数是用一个已经存在的对象赋值另一个已经存在的对象,这是二者本质的区别
再谈单例
线程安全的单例和单例资源的回收,实现单例模板类支持快速创建单例
序列式容器
vector 和 list 核心源码解读
单继承和多继承
当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类
STL 空间配置器
没见网上有人把这个讲清楚的,侯捷本人在书里也没讲清楚
模板中头文件和源文件的处置方式
只有实例化模板,编译器才能生成实际的代码,而我们之前只在头文件这种实现方式,是因为编译器根据我们的使用,知道我们需要什么类型的模板,生成实际的代码,比如实际的函数,实际的类,实际的变量等,然后再去调用。编译器的这种行为,我们称之为“隐式实例化模板”