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
阅读全文
0 0
- smart ptr 学习理解笔记
- Smart ptr
- boost :Smart ptr
- 理解*ptr++
- Learning boost 5 -- Smart ptr
- Learning boost 3 -- Smart ptr
- PyQt学习笔记(4)--Smart Dialog
- smart学习
- 理解接口开发中的*Ptr
- Smart Client学习笔记(1) 智能客户端开发概览
- Composite UI Application Block学习笔记之Smart Part
- OGRE1.7学习笔记二:singleton,Smart Point,Memory Manager
- Smart Client 学习笔记(02):添加工具条按钮
- PyQt学习笔记(4)——Smart Dialogs
- boost smart pointer 笔记
- 理解智能指针(Smart Pointer)
- 开始学习Smart Forms
- smart学习之旅
- Spring--java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource问题解决
- 运算符+-*/的重载代码
- maven因为测试类打包报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
- 基类与派生类的赋值
- python中random模块基础用法(利用random生成验证码)
- smart ptr 学习理解笔记
- 单例模式
- IE/Firefox/Chrome等浏览器保存Cookie的位置
- tomcat nginx调优
- 理解TCP/IP协议栈(2)
- Socket请求和Http请求的各自特点、区别及适用场景
- curl请求
- centos7:Nginx+docker+springboot的环境搭建(一)
- linux 备份数据库到 NAS