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-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升