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的对象没有释放,将会增加引用计数
但是毕竟智能指针也是很多人在用,作为复习进行一下小结。
//已经完全可以淘汰的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的对象没有释放,将会增加引用计数
相关文章推荐
- C++中智能指针的用法(1)
- C++ auto_ptr 智能指针的用法
- C++智能指针作为成员变量的用法
- C++ auto_ptr智能指针的用法
- C++中auto_ptr智能指针的用法详解
- C++ auto_ptr智能指针的用法
- c++ 智能指针用法详解
- C++的RAII和智能指针小结
- c++ 智能指针用法详解
- C++各种智能指针的用法及区别
- C++ auto_ptr智能指针的用法
- C++智能指针的用法
- C++ auto_ptr智能指针的用法
- C++智能指针用法详解
- c++ 智能指针用法详解
- C++ auto_ptr智能指针的用法
- c++ 智能指针用法详解
- C++智能指针auto_ptr源码完全解析---以微软auto_ptr为例来探讨auto_ptr的用法
- C++系列——const,引用,指针用法小结
- C++ auto_ptr智能指针的用法