智能指针的出现,让很多内存泄漏的隐患降低了不少,但是本人真的非常非常不推荐大面积铺开使用智能指针这个东西,这个东西一是性能不如老老实实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的对象没有释放,将会增加引用计数