【C++】之《智能指针》

智能指针的作用是管理一个指针,因为使用指针申请堆内存空间时会存在以下问题:申请的内存空间在程序结束时忘记释放,造成内存泄漏;同一块内存空间被二次释放。使用智能指针可以在很大程度上避免这些问题,因为智能指针就是一个类,当超出了类的作用域时,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在程序结束时自动释放内存空间,不需要手动释放内存空间
(1)shared_ptr:多个指针指向同一个对象。shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。每使用他一次,内部的引用计数加1,每析构一次,内部的引用计数减1,减为0时,自动删除所指向的堆内存。
(2)unique_ptr:同一时刻只能有一个unique_ptr指向给定对象(通过禁止拷贝语义、只有移动语义来实现)。unique_ptr指针本身的生命周期:从unique_ptr指针创建时开始,直到离开作用域。
(3)weak_ptr是为了配合shared_ptr而引入的一种智能指针,因为它不具有普通指针的行为,它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况。weak_ptr可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权。但weak_ptr没有共享资源,它的构造不会引起指针引用计数的增加。使用weak_ptr的成员函数use_count()可以观测资源的引用计数,另一个成员函数expired()的功能等价于use_count()==0,但更快,表示被观测的资源(也就是shared_ptr的管理的资源)已经不复存在。weak_ptr可以使用一个非常重要的成员函数lock()从被观测的shared_ptr获得一个可用的shared_ptr对象, 从而操作资源。

猜你喜欢

转载自blog.csdn.net/qq_27577651/article/details/107333521