smart ptr 学习理解笔记

来源:互联网 发布:苍云成男捏脸数据 编辑:程序博客网 时间:2024/05/29 14:50

很多人使用C++的时候,最头疼的问题之一就是内存泄漏和野指针问题,内存泄漏的话风险会很大,野指针问题则会导致程序非法地址访问直接宕机。如果对内存没有概念,不知道生命周期,在使用C++上就会觉得非常头疼,但使用得当的话这也是C++的一把利剑。智能指针的出现,就是为了降低C++程序猿的门槛,即使你对内存没有那么深刻的概念,只要你按照智能指针的规则来使,就能很大程度上避免内存泄漏和野指针这两大难题。


具体的实现有源代码、有数不胜数的教程,这里只记录一下我自己的体会,以便回顾。


智能指针的核心,就是引用计数机制。一般情况下,如果你直接copy一个指针,例如ptr A = B;在B被释放的时候,并没有告知A,导致A仍然记得原来的地址,但是这块地址已经释放过了。再使用A的时候就会内存非法。而智能指针呢,通过重载=操作符,使得在B析构释放的时候,发现引用计数不为零,于是并不会真正的释放这块内存。在A使用的时候,ptr仍然有效。很简单的原理,但是实现的过程却是巨复杂。其实可以根据项目需要,自己定制化自己的智能指针实现。


附上一篇博客:

http://blog.csdn.net/jnu_simba/article/details/9569593

原创粉丝点击