您的位置:首页 > 编程语言 > C语言/C++

C++ 智能指针用法小结

2017-02-28 17:34 387 查看
智能指针的出现,让很多内存泄漏的隐患降低了不少,但是本人真的非常非常不推荐大面积铺开使用智能指针这个东西,这个东西一是性能不如老老实实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的对象没有释放,将会增加引用计数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: