十六、C++14标准和智能指针

本章介绍C++14的新特性并介绍一下C++11之前之后的智能指针。其实C++14标准相比C++11标准就新增了一些自动推导的特性,比如lambda表达式参数类型推导、函数返回类型自动推导;以及新增了lambda表达式的初始化捕获。

lambda表达式参数类型推导
出现输入较为麻烦的类型不需要再换名,直接写成auto。例如:

函数返回类型推导
更改返回值类型时,不再需要每次更改函数的返回类型。例如:

lambda表达式的初始化捕获
相当于间接传值,避免直接传值,并且该间接值不需要初始化。例如:

C++11之前的智能指针
C++11之前的智能指针是auto_ptr,一开始它的出现是为了解决指针没有释放导致的内存泄漏。比如忘了释放或者在释放之前,程序throw出错误,导致没有释放。所以auto_ptr在这个对象声明周期结束之后,自动调用其析构函数释放掉内存。
以上3句中,只有第3句是符合规范的。因为其是使用new定义的,会存在于堆中,而堆是允许进行内存操作的。而1、2句绑定在非堆的变量上,这样在释放时极容易出现错误。所以千万不要用一块非new分配的动态内存去初始化一个智能指针。也需要注意,auto_ptr不能够作为函数的返回值和函数的参数,也不能在容器中保存autp_ptr,导致使用不便。

C++11之后的智能指针
C++11之后智能指针分为了三种:shared_ptr、unique_ptr、weak_ptr。而weak_ptr相当于shared_ptr的一个辅助指针, 所以正式的智能指针只有shared_ptr和unique_ptr。
具体用法和说明见https://blog.csdn.net/haolexiao/article/details/56773039?%3E。(我偷偷懒[]~( ̄▽ ̄)~*)