智能指针是存储指向动态分配对象指针的类,用于生存期控制;能够确保正确销毁动态分配的内存,防止内存泄露。本博文参考博客https://blog.csdn.net/yusiguyuan/article/details/40628805
(1)智能指针的分类
1.不带引用计数的智能指针auto_ptr 、unique_ptr、 scoped_ptr
2.带引用计数的智能指针shared_ptr强智能指针、weak_ptr弱智能指针;
(2)不带引用计数的智能指针释放内存
1.auto_ptr
它的结构中有两个成员:_ptr和owns,只有获得对引用资源的管理权,才有权再出作用域之后释放资源;实现了拥有权限的指针可以释放资源,但是只能管理一块内存,而实际中,我们设计出一块资源可以由多个指针引用的情况
每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;调用析构函数时,析构函数减少引用计数(如果引用计数减至0,则删除基础对象)。代码示例如下:
template <typename T>
class Auto_Ptr
{
public:
//构造函数
Auto_Ptr (T *ptr =