导语
本篇不对智能指针的实现原理做详细研究,只讨论为什么要使用智能指针,以及使用规范和注意事项。
关于指针和智能指针
指针是一个变量,存储一块内存区域的地址。
指针指向一块内存,通过该指针可随意修改或者删除其中内容,那么我们可以说这个指针对这块内存具有所有权(ownership) 。
PS:通常说的指向一个对象的指针,严格意义上来说应该是指向一个对象所在内存的指针。指针可以说和对象本身是没关系的,只是对象的类型(class)更详细的描述这块内存区域存的是什么内容。
指针存在的意义:
1.访问特定内存中的数据
2.管理所拥有的内存,不再使用的内存要及时通知系统释放
裸指针能满足以上的访问和管理内存的需求,但是存在缺陷:
多个指针可以指向同一块内存
也就是意味着权限混乱,比如创建(new)多个指针指向同一块内存,但是每个指针使用完毕,都没有释放(delete),从而导致内存泄露。
或者所有的指针只要自己使用完毕就去释放内存,势必会造成正在使用该内存的地方产生未知结果,或者重复释放(delete)同一块内存导致崩溃。