智能指针

一、智能指针是什么?
智能指针是一种用来防止内存泄漏的方式,在某些情况下由于函数逻辑的原因,在执行到某一布的时候执行了“return”,而没有调用相应的free(ptr)或者 delete ptr,从而导致了内存泄漏,智能指针它利用了对象出栈作用域会自动析构的特性来达到防止内存泄漏的目的。智能指针共有两种,分别是不带引用计数的只能指针和带引用计数的智能指针。
二、不带引用计数的智能指针
auto_ptr、scoped_ptr、unique_ptr;后面两个为C++11新标准提供的智能指针;除非使用场景以及数据对象非常简单的时候,否则我们不建议使用auto_ptr,尤其是操作复杂的时候;
由于scoped_ptr的解决方式比auto_ptr的解决方式更为暴力,它在指针指向内存转移的时候直接将原来指针删除,我们也不建议使用它。所以我们一般在使用不带引用计数智能指针的时候我们建议使用unique_ptr;
三、带引用计数的指针指针
shared_ptr、weak_ptr(它们本身是线程安全的,可直接 用于多线程当中);
带引用计数指的是多个智能指针可以管理同一个资源,给每一个资源匹配一个引用计数;当智能指指向该资源的时候引用计数+1;当该指针不使用该资源,该资源引用计数-1,如果不使用该资源时引用计数为0时,则调用析构函数。
四、强智能指针交叉引用计数问题。
在带引用计数的智能指针当中,shared_ptr会改变资源的引用计数,我们称之为强智能指针。而weak_ptr不会,我们将它称之为弱智能指针。
从观察者的角度看,弱智能指针 “观察”强智能指针,强智能指针“观察”资源(内存)。
之所以需要引入弱智能指针,为了解决强智能指针的循环(交叉)引用问题;在定义对象的时候使用强智能指针,在引用对象的地方用弱智能指针。
弱智能指针不能像裸指针一样的去使用他它,它没有提供 T& operator*()和 T *operator->()方法;r若要使用则将它提升为强智能指针;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值