ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++ 智能指针

2022-07-28 17:31:46  阅读:186  来源: 互联网

标签:指向 C++ 智能 内存 shared ptr 指针


1.智能指针的作用和定义

智能指针的作用是管理指针所指向的内存的生命周期,能够管理(控制)该内存的共享和释放,避免用户在使用完该内存后忘记释放,造成内存泄漏。

智能指针是普通(生的,即未封装的)指针的封装,在提供普通指针的功能同时,管理指针所指向的内存空间,当智能指针的实例超出其作用域是,会自动调用析构函数,释放其管理的指针所指向的资源。

2.智能指针的常用接口

T* get();//⽤来获取 auto_ptr 封装在内部的指针, 也就是获取原⽣指针
T& operator*();//解引用,作用和普通指针一样
T* operator->();//解成员引用,作用和普通指针一样
T* release();//释放当前管理的内存
void reset (T* ptr = nullptr);释放当前管理的内存,并接手对ptr所指向的内存的管理。

3.智能指针的类型

1.unique_ptr

unique_ptr指针是一种独占所有权模式的智能指针,unique_ptr独占它所管理的内存,保证同一时间内只有一个智能指针可以指向该内存。

2.shared_ptr

shared_ptr是一种资源所有权模式的智能指针,它采用引用计数的机制,获知当前内存拥有者个数,当计数归零时资源会释放。拷贝赋值会导致计数增加,析构会导致计数减少。

3.weak_ptr

weak_ptr是一种不控制内存生命周期的智能指针,它指向一个shared_ptr所管理的内存。它只提供对管理对象的访问手段,其构造和析构不会引起引用计数的改变。

其作用是用来解决shared_ptr循环引用是所引起的死锁问题(循环引用指的是使用多个智能指针 shared_ptr 时,出现了指针之间的相互指向,从而形成环的情况,类似于死锁现象,在这种情况下智能指针往往不能正常调用对象的析构函数,从而造成内存泄漏)。

4.auto_ptr

和unique类似,已过时,别用(没有禁用拷贝,存在潜在的内存崩溃问题)。

 

标签:指向,C++,智能,内存,shared,ptr,指针
来源: https://www.cnblogs.com/mshentaiBlog/p/16529508.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有