谷歌seo网站建设,华为荣耀官网网站,工控界面设计,天猫购物商城官网什么是智能指针#xff1a; 智能指针是一个类#xff0c;用来存储指向动态分配对象的指针#xff0c;负责自动释放动态分配的对象#xff0c;防止堆内存泄漏。动态分配的资源#xff0c;交给一个类对象去管理#xff0c;当类对象声明周期结束时#xff0c;自动调用析构函…什么是智能指针 智能指针是一个类用来存储指向动态分配对象的指针负责自动释放动态分配的对象防止堆内存泄漏。动态分配的资源交给一个类对象去管理当类对象声明周期结束时自动调用析构函数释放资源。 裸指针的缺点
1.难区分执行一个或多个对象
2.难以判断是否该销毁有没有多次销毁
3.难以缺点delete还是delete[]
常见智能指针
auto_ptr、unique_ptr、shared_ptr、weak_ptr;
auto_ptr在C11中被舍弃不支持对象数组操作、赋值和复制会改变资源的所有权。
RAII获取资源即初始化 充分地利用了c语言局部对象自动销毁的特性来控制资源内存heap、网络套接字、互斥量文件句柄等的生命周期。 RALL过程中的四个步骤 设计一个类封装资源在构造函数中初始化在析构函数中执行销毁操作使用时定义一个该类的局部对象 unique_ptr唯一型智能指针 指针、资源一对一。不能两个指针指向一个地址所以不支持普通赋值和拷贝构造需要用移动构造和移动赋值。
shared_ptr共享型智能指针 shared_ptr内有两个指针_Ptr和_Rep
_Ptr指向申请的空间_Rep指向_Uses和_Weaks,创建指针后_Uses默认为1、_Weaks默认为1
_Uses记录有多少个共享指针指向那个空间
当_Uses值为0时_Weaks也变为0释放空间指针置为空。
weak_ptr弱指针 弱引用指针weak_ptr监视shared_ptr的生命周期没有*-操作。
weak_ptr需要shared_ptr实例来初始化同样有_Ptr和_Rep当创建弱指针时_Weaks1
use_count()可以获取当前有几个共享性智能指针指向该资源即_Uses的值。
//创建弱指针
int main()
{shared_ptrint pa(new int(10));weak_ptrint wp(pa);
}
expired()方法 弱指针 expired() 方法用于检查所指向的对象是否已经被销毁返回值是一个 bool 类型的变量如果所指向的对象已经被销毁则返回 true否则返回 false。 在某些情况下我们需要检查所指对象是否还存在以避免程序出现空指针异常或者未定义行为。这时就可以使用 weak_ptr 的 expired() 方法来判断所指对象是否已经被销毁从而避免出现访问已经不存在的对象的情况。
lock()方法 lock()方法获取所监视的shared_ptr 弱指针是一种不拥有所指对象的智能指针它只是对所指对象的一个观察者因此它不能直接访问所指对象而是需要通过转换为 shared_ptr 或者使用 lock() 方法获取一个 shared_ptr然后才可以访问所指对象。
对于lock()返回的共享型智能指针一定要判断一下是否存在存在与不存在lock都会返回指针。
shared_ptrintsp(new int(10));
weak_ptrint gw(sp);
shared_ptrintspt gw.lock();
if(spt)
{//使用spt
}