智能指针概念
所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放。它是一个类,有类似指针的功能,对*和->运算符进行了重载。
常见智能指针auto_ptr,unique_ptr,,shared_ptr,weak_ptr
使用智能指针必须添加头文件include<memory>
智能指针对->和*运算符做了重载
<1>auto_ptr
使用
缺点:
auto_ptr不能赋值和用于初始化另一个对象,如果进行了此类操作,则原智能指针对象无效
auto_ptr只能管理单个对象,不能管理对象数组
再c++11标准中已经废弃auto_ptr
<2>unique_ptr
使用
1.可以看作是auto_ptr的代替品。因为它对对象的所有权比较专一,所以叫unique
2.不允许进行拷贝构造和赋值操作
3.允许函数返回unique_ptr;
4.支持对象数组
<3>shared_ptr
使用
shared_ptr定义智能指针A拷贝构造产生智能指针B的时候,A和B共享同一个对象
shared_ptr定义智能指针A赋值shared_ptr定义的智能指针B的时候,A和B共享同一个对象
实现原理:shared_ptr智能指针实现的时候,它内部使用了引用计数的技术
编译参数:-std=c++11
缺点:循环引用的时候,会带来内存泄漏
<4>weak_ptr
特点:
1.weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作
2.weak_ptr的含义为“弱引用”,它的构造和析构不会引起技术的增加或减少
3.它可以从一个shared_ptr或另一个weak_ptr产生
4.他没有重载*和->,所以不能通过它访问对象内部的成员
5.可以使用它提供的lock()获得一个可用的shared_ptr对象
编译参数—— -std=c++11
shared_ptr实现原理总结: