智能指针
重点:四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr
std名称空间定义了3种智能指针。
unique_ptr<T>
具有唯一性,不会有多个该指针指向同一地址,该指针不可复制。
创建
必须是直接初始化
可以用传统的new
unique_ptr<double> pdata{new double{999.0}};
也可以用 make_unique<T>() 方法
unique_ptr<double> pdata {make_unique<double>(999.0)};
auto pdata {make_unique<double>(999.0)};
修改和访问
*pdata = 8888;
cout << *pdata << endl;
取地址 get()
pdata.get();
重置 reset()
不带参数重置为nullptr,带参数重置为指向参数这个对象的指针,
如果参数是unique_ptr,需要使用 release() 放弃其控制权。
unique_ptr <string> p3 {new string ("Hi, Trex")}; p2.reset(p3.release());
把所有权转换给另一个智能指针 release()
unique_ptr<string> p2(p1.release()) //p1放弃对于指针的控制权
shared_ptr<T>
多个指针指向同一地址,会增加引用计数。引用计数为0则自动释放。
创建
除了用make_unique<T>()
还可以用另外一个share_ptr()来创建。
share_ptr<double> pdata2 {pdata};
weak_ptr<T>
不控制所指对象生命期的智能指针
指向 shared_ptr<T> 时不增加引用计数,不能防止它指向的对象被释放。但也可以阻止在被释放后访问悬挂指针的情况
创建
shared_ptr <int> p1{make_unique<int>(250)}; weak_ptr <int> p2 (p1);
赋值
可以把shared_ptr或 weak_ptr 用 = 赋值给另一个weak_ptr
posted on 2022-06-05 11:27 MIXTAPE_208 阅读(26) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端