智能指针

重点:四种智能指针及底层实现: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   MIXTAPE_208  阅读(26)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示