C++ 智能指针用法小结

智能指针的出现,让很多内存泄漏的隐患降低了不少,但是本人真的非常非常不推荐大面积铺开使用智能指针这个东西,这个东西一是性能不如老老实实new ,delete,而且一旦没用用好,反而适得其反。

但是毕竟智能指针也是很多人在用,作为复习进行一下小结。


//已经完全可以淘汰的auto_ptr就不说了,没人会用这个过时货

1.std::shared_ptr 这个智能指针是重点中的重点了,但是 C++11 之后才正式出来,如果是C++ 99的那种编译器是不行的。

  用法很简单

  std::shared_ptr<MyClass> pInt(new MyClass());//把一个new出来对象弄到智能指针中去

  MyClass *h = pInt.get();//这个方法是获取智能指针指向的当前内存对象

  std::shared_ptr<MyClass> pInt2 = pInt;//这样一个过程引用计数就加1

  pInt.use_count();//查看智能指针总共有几个副本引用

  pInt.unique();//查看是否只有唯一的引用,也就是引用计数为1

  如上代码在一个大括号结束之后,智能指针降自动释放

2.std::unique_ptr基本可以理解为std::shared_ptr 的一个子集变种,他表现为引用计数最大就只能1个

3.std::weak_ptr 按名字理解就是弱引用,可以说是对std::shared_ptr 一个补充,和修补方案吧(至少看起来很像)

std::weak_ptr<MyClass> wp2;

{

std::shared_ptr<MyClass> gg(new MyClass());

        wp2=gg;//std::weak_ptr 可以表示弱引用,不增加引用计数,所以std::weak_ptr往往是接过std::shared_ptr的对象,而不产生引用计数的叠加

}

wp2.expire()//判断对象是否释放掉了

std::shared_ptr<MyClass> g=wp2.lock();//获得内存对象,并把对象引用传递给新的智能指针g,这样如果wp2的对象没有释放,将会增加引用计数




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值