- 《面向对象C++程序设计》皮德常 编著 清华大学出版社 2017
- 《C++ Primer Plus (第6版)中文版》Stephen Prata 著 张海龙 袁国忠 译 人民邮电出版社 2012
1 C++11 的新特性
- 核心特性:智能指针、右值引用、移动语义、完美转发、lambda 表达式(必答)
- 其它特性:auto、decltype、long long、函数返回类型自动推导、删除函数、列表初始化、nullptr、using 声明、限定作用域的枚举类型、const_iterator、override 声明、noexcept 声明、constexpr、范围 for 循环
2 智能指针
C++11 中引入了智能指针的概念,方便管理堆内存。
- 智能指针是利用了一种叫做 RAII(资源获取即初始化)的技术对普通的指针进行封装,这使得智能指针实质是一个对象,行为表现的却像一个指针。
- 智能指针的作用是防止忘记调用delete释放内存和程序异常的进入catch块忘记释放内存。另外指针的释放时机也是非常有考究的,多次释放同一个指针会造成程序崩溃,这些都可以通过智能指针来解决。
- 智能指针还有一个作用是把值语义转换成引用语义。
- unique_ptr:实现的是专属所有权的语义,它是智能指针的默认选项。unique_ptr 是个只移型别,不能复制或共享。unique_ptr 小巧高效,大小等同于一个指针且支持右值引用,从而可实现快速插入和对 STL 集合的检索。
- shared_ptr:采用引用计数的智能指针。如果你想要将一个裸指针分配给多个所有者,请使用该指针。直至所有 shared_ptr 所有者超出了范围或放弃所有权,才会删除裸指针。大小为两个裸指针:一个用于指向裸指针指向的对象,另一个用于指向包含引用计数的共享控制块。
- weak_ptr :结合 shared_ptr 使用的特例智能指针。 weak_ptr 提供对一个或多个 shared_ptr 实例拥有的对象的访问,但不参与引用计数。如果你想要观察某个对象但不需要其保持活动状态,请使用该实例。在某些情况下,用于断开 shared_ptr 实例间的循环引用。
https://www.cnblogs.com/wxquare/p/4759020.html
3 右值引用
左值和右值的概念
值引用的目的是为了延长用来初始化对象的生命周期。
https://zhuanlan.zhihu.com/p/54050093
4 移动语义
将内存的所有权从一个对象转移到另外一个对象,高效的移动用来替换效率低下的复制,对象的移动语义需要实现移动构造函数(move constructor)和移动赋值运算符(move assignment operator)。
5 完美转发
定义一个函数模板,该函数模板可以接收任意类型参数,然后将参数转发给其它目标函数,且保证目标函数接受的参数其类型与传递给模板函数的类型相同。
6 lambda 表达式
利用Lambda表达式,可以方便的定义和创建匿名函数。