(一)讲一下右值引用
目的:
1)消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率
2)能够更简洁明确的定义泛型函数
链接:【C++】—— 如何跟面试官讲述什么是右值引用_chenxiyuehh的博客-优快云博客_什么是右值引用
(二)智能指针
auto_ptr(已被弃用)、shared_ptr、weak_ptr、unique_ptr
【1】为什么要使用智能指针
智能指针的作用是管理一个指针,因为存在以下这种情况,申请的空间在函数结束时忘记释放,造成内存泄漏,使智能指针可以很大程度上的避免这个问题;因为智能指针就是一个类,当超出了类的作用域,类会自动调用析构函数,析构函数会自动释放资源;
智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。 当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存, 从而防止内存泄漏。
auto_ptr:
1)已弃用,auto_ptr存在内存崩溃的问题,因为采用的是对象所有权模式,用auto_ptr进行资源转移,不能共享对象的所有权;
2)被赋值或者拷贝后,失去对原指针的管理;
3)不能管理数组指针,因为auto_ptr的内部实现中,析构函数中删除对象使用的是delete而不是delete[], 释放内存时仅释放了数组的第一个元素的空间,会造成内存泄漏;
4)不能作为容器对象,因为STL容器中的元素经常要支持拷贝、赋值等操作;
unique_ptr:
1)是auto_ptr的优化版本,严格意义上的独享所有权,采用了对象所有权模式,保证同一时间只能有一个智能指针指向该对象;
2)拷贝构造和赋值运算符被禁,不能进行拷贝构造和赋值运算;
share_ptr:
1)shared_ptr:多个指针可以共享相同对象,该对象及资源会在最后一个引用被销毁时释放
2)但是如果有两个shared_ptr相互引用,那么这两个引用计数永远不为0,资源不被释放;
weak_ptr:
1)weak_ptr:解决shared_ptr相互引用时,产生死锁的问题,计数永远降不到0,没办法进行资源释放,造成内存泄漏问题。
(三)nullptr
nullptr可以转换成其它任意的指针类型;
(四)auto
1)类型说明符:分析表达式所属的类型
2)auto必须要确定初始值,因为是通过初始值来判断它所属的类型
(五)decltype
1)用于从表达式的类型推断出定义的变量类型
decltype(i)// 使用的是一个不加括号的变量,那么会得到的结果就是这个变量的类型
decltype((i)) // 给变量加上一层或多层括号,会将这个变量当做表达式看
(五)lambda
(六)final
1)禁止继承,加上final的类称为最终类,此类不能被继承
class Person final {}