本文主要是介绍C++11: 智能指针(auto_ptr 、unique_ptr、shared_ptr、weak_ptr)使用技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- auto_ptr
- unique_ptr
- shared_ptr
- weak_ptr
智能指针采用了RAII思想,自动化管理指针所指向的动态资源的释放
RAII:资源获取及初始化。
在对象构造时获取资源,接着控制对资源的访问使之,在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源
auto_ptr
代理了被托管的对象指针,管理对象的生命周期,即实现自动释放,重载了 operator->和 operator*,已废弃,防止两个 auto_ptr 对象拥有同一个对象(一块内存)
解决c中申请指针空间,忘记释放或者多次释放问题
- 初始化
int *p = new int(10);auto_ptr<int> p1(p);cout<<*p1<<endl; // 10auto_ptr<int> p2(new int(3));cout<<*p2<<endl; // 2
- 函数传参,主函数不能使用传参的指针,指针的内存在离开函数时已释放
void func(auto_ptr<Copy> upc)
{}
int main()
{auto_ptr<Copy> apc(new Copy(10));cout<<*apc->_i<<endl;func(apc); cout<<*apc->_i<<endl; // error ,*apc 内存已经释放return 0;
}
api:
- get() : 获取所托管资源指针
- operator bool : 非空为真
- release () 放弃托管,返回资源指针
- reset (): 有参(管新资源,释放旧资源) 无参(释放旧资源)
unique_ptr
使用同 auto_ptr, 不同之处,就在于实现了资源的
唯一, 既不可以拷贝也不可以赋值;
解决c中野指针的问题,指针释放空间后,没有置空,继续使用
- 初始化
void func(unique_ptr<Copy> up)
{
}
int main
{unique_ptr<Copy>
这篇关于C++11: 智能指针(auto_ptr 、unique_ptr、shared_ptr、weak_ptr)使用技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!