c++11之智能指针】的更多相关文章

多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为了省时间一般都是任由这个内存泄漏发生. 当然也可以经过复杂的设计,由一个监控线程来统一删除, 但这样会增加代码量和复杂度.这下好了,shared_ptr 可以方便的解决问题,因为它是引用计数和线程安全的. shared_ptr不用手动去释放资源,它会智能地在合适的时候去自动释放. 我们来测试看看效果…
在c++98中,智能指针通过一个模板“auto_ptr”来实现,auto_ptr以对象的方式来管理堆分配的内存,在适当的时间(比如析构),释放所获得的内存.这种内存管理的方式只需要程序员将new操作返回的指针作为auto_ptr的初始值即可,程序员不能显式的调用delete.如 auto_ptr(new int);    这在一定程度上避免了堆内存忘记释放造成的问题.不过auto_ptr也有一些缺点(拷贝是返回一个左值,不能调用delete[]等),所以在c++11中被废弃了.c++11标准照中…
在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃.程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的.比如: 有些内存资源已经被释放,但指向它的指针并没有改变指向(成为了野指针),并且后续还在使用: 有些内存资源已经被释放,后期又试图再释放一次(重复释放同一块内存会导致程序运行崩溃): 没有及时释放不再使用的内存资源,造成内存泄漏,程序占用的内存资源越来越多. 针对以上这些情况,很多程序员认为 C++ 语言应该提供更友好的内存管理机制,这样就可以将…
在<C++11 shared_ptr智能指针>的基础上,本节继续讲解 C++11 标准提供的另一种智能指针,即 unique_ptr 智能指针. 作为智能指针的一种,unique_ptr 指针自然也具备"在适当时机自动释放堆内存空间"的能力.和 shared_ptr 指针最大的不同之处在于,unique_ptr 指针指向的堆内存无法同其它 unique_ptr 共享,也就是说,每个 unique_ptr 指针都独自拥有对其所指堆内存空间的所有权. 这也就意味着,每个 uni…
目录 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 1.智能指针的作用 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理.程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存.使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存. 理解智能指针需要从下面三个层次: 从较浅的层面看,智能指针是利用了一种叫做RAII(资…
和 shared_ptr.unique_ptr 类型指针一样,weak_ptr 智能指针也是以模板类的方式实现的.weak_ptr<T>( T 为指针所指数据的类型)定义在<memory>头文件,并位于 std 命名空间中.因此,要想使用 weak_ptr 类型指针,程序中应首先包含如下 2 条语句: #include <memory> using namespace std; 第 2 句并不是必须的,可以不添加,则后续在使用 unique_ptr 指针时,必须标注st…
今晚跟同学谈了一下智能指针,突然想要看一下C++11的智能指针的实现,因此下了这篇博文. 以下代码出自于VS2012 <memory> template<class _Ty> class shared_ptr : public _Ptr_base<_Ty> { // class for reference counted resource management public: typedef shared_ptr<_Ty> _Myt; typedef _Pt…
平时习惯使用cocos2d-x的Ref内存模式,回过头来在控制台项目中觉得c++的智能指针有点生疏,于是便重温一下.首先有请c++智能指针们登场: std::auto_ptr.std::unique_ptr.std::shared_ptr .std::weak_ptr |auto_ptr(不要使用的指针) 没有智能指针的c++时代,对堆内存的管理就是简单的new delete.但是缺点是容易忘了delete释放,即使是资深码农,也可能会在某一个地方忘记delete它,造成内存泄漏.在实际工程中,…
下面的智能指针分别对应boost库,Qt库,c++11的智能指针 boost::scoped_ptr  QScopedPointer unique_ptr 在其生命期结束后会自动删除它所指的对象(确定无需共享)boost::shared_ptr QSharedPointer shared_ptr 引用计数为0的时候自动删除它所指对象(需要共享)boost::weak_ptr QWeakPointer weak_ptr 用来避免循环引用(需要访问shared_ptr,又不想改变引用计数)…
http://stackoverflow.com/questions/15648844/using-smart-pointers-for-class-members Question: I'm havingtrouble understanding the usage of smart pointers as class members in C++11. Ihave read a lot about smart pointers and I think I do understand howu…