C++智能指针的几种用法

 auto在c++11中已经弃用。

一、auto_ptr模板

  auto_ptr与shared_ptr、unique_ptr都定义了类似指针的对象,可以将new到的地址赋给这一对象,当智能指针过期时,析构函数会调用delete函数,对象将被销毁,由此内存可以自动被释放。

二、shared_ptr模板

  先看代码:

auto_ptr p1 (new string("hello world!");
auto_ptr p2;
p2 = p1; 

 

  在以上代码中,p1与p2指向同一对象,常规指针在释放内存时,系统会尝试删除同一对象两次。在auto_ptr中,对象的所有权会归于p2,p1将会变为野指针。shared_ptr则允许多个指针指向同一个对象,每多一个指针指向,计数器就会+1,同样在释放的时候,当数值减为0的时候即最后一个指针过期的时候才会调用delete函数。

三、unique_ptr模板

  同样为了避免多个指针指向,unique_ptr严格了所有权的概念,即我的就我的,不允许他人指向(如代码段二中,采用unique_ptr编辑将会报错,而原代码会编译通过但可能造成崩溃)。

四、总结

  需要多个指针指向一个对象时可使用shared_ptr,如指针数组。不需要多个指针指向一个对象可使用uniq_ptr,uniqu_ptr比auto_ptr更加安全(编译报错远比程序崩溃好得多)。这里做了一个表格总结。

                      C++智能指针的几种用法

 

 

参考链接:

智能指针用法详解

三种智能指针使用与区别

四种智能指针的用法和原理

C++智能指针及其简单实现

原文链接: https://www.cnblogs.com/AndrewYin/p/9219311.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++智能指针的几种用法

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/276488

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 上午1:46
下一篇 2023年2月15日 上午1:47

相关推荐