智能指针概述
本文主要讲解C++primer中的智能指针的概念,以及标准库中的auto_ptr类,boost库中的scoped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr,其中很多个人的理解,如有问题欢迎指正。这里面涉及到 解引用操作符的重载,箭头操作符的重载,类模板等知识。
在编写C++代码的时候,经常需要分配内存、释放内存,一般是通过指针实现的,即便是资深的C++程序员有时也会忘掉delete,这就会导致内存的泄漏,这就需要一种自动释放资源的机制,所以提出了智能指针的概念,我们通过智能指针对象代理了普通指针的行为(代理模式)。智能指针其实就是模拟指针动作的类,所以智能指针类一般都会重载 -> 和 * 操作符。智能指针对象能在资源不再被使用的时候自动释放资源,也就是在智能指针对象析够的时候自动去释放其管理的资源。
智能指针的分类
智能指针主要分为两类:按资源供几个智能指针对象管理分为独占型(自己起的名字)和共享型智能指针。独占型智能指针所管理的资源只能由一个智能指针对象负责管理(即释放),独占型又可以细分为可以转让管理权和不能转让管理权两种类型,可转让管理权的智能指针在复制构造和赋值的时候都会发生管理权的转移,比如sp2=sp1,赋值结束后,sp2释放了对以前资源的管理权,开始拥有赋值前sp1所指对象的管理权,sp1不在拥有管理权。共享型智能指针通过维护一个对资源的引用计数来实现多个智能指针对象使用同一资源,每当资源上新增一个智能指针对象的时候,引用计数就加1,智能指针对象析够的时候,引用计