C++ 智能指针
2022/7/29 14:26:54
本文主要是介绍C++ 智能指针,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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++ 智能指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享