shared_ptr & weak_ptr】的更多相关文章

stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结 1. auto_ptrauto_ptr主要是用来解决资源自动释放的问题,比如如下代码:void Function(){Obj*p = new Obj(20);...if (error occor)throw ... 或者 retrun;delete p;}在函数遇到错误之后,一般会抛异常,或者返回,但是这时很可能遗漏之前申请的资源,及时是很有经验的程序员也有可能出现这种错误,而使用auto…
shared_ptr <1> 类模板说明 namespace boost { class bad_weak_ptr: public std::exception; template<class T> class weak_ptr; template<class T> class shared_ptr { public: typedef T element_type; 1.1 构造与析构 /* 1.1.1 默认构造 */ 说明:构造一个空的shared_ptr 结果:us…
参考<<Boost程序库完全开放指南>> shared_ptr  类摘要(只列出了常用的部分)和相关说明 template <class T> class shared_ptr { public: typedef T element_type; shared_ptr(); template<class Y> explicit shared_ptr(Y * p); template<class Y, class D> shared_ptr(Y *…
文档: http://www.boost.org/doc/libs/1_57_0/libs/smart_ptr/shared_ptr.htm shared_ptr构造有个原型 template<class Y, class D> shared_ptr(Y * p, D d);d是deleter.如shared_ptr<FILE> ctx(fp,::flose); Introduction The shared_ptr class template stores a pointer…
其主要的类关系如下所示(省略相关的类模板参数): 图1 从上面的类图可以清楚的看出shared_ptr内部含有一个指向被管理对象(managed object)T的指针以及一个__shared_count对象,__shared_count对象包含一个指向管理对象(manager object)的基类指针,管理对象(manager object)由具有原子属性的use_count和weak_count.指向被管理对象(managed object)T的指针.以及用来销毁被管理对象的deleter组…
http://mojijs.com/2016/08/218129/index.html http://www.cnblogs.com/lanxuezaipiao/p/4132096.html…
shared_ptr是带引用计数的智能指针,可以说大部分的情形选择用shared_ptr不会出问题.那么weak_ptr是什么,应该怎么用呢? weak_ptr也是智能指针,但是比较弱,感觉没什么用.其实它的出现是伴随shared_ptr而来,尤其是解决了一个引用计数导致的问题:在存在循环引用的时候会出现内存泄漏. 关于循环引用,看下面这个小例子就足够了: #include <iostream> #include <boost/smart_ptr.hpp> using namesp…
enable_shared_from_this是一个模板类,定义于头文件<memory>,其原型为: template< class T > class enable_shared_from_this;       std::enable_shared_from_this 能让一个对象(假设其名为 t ,且已被一个 std::shared_ptr 对象 pt 管理)安全地生成其他额外的 std::shared_ptr 实例(假设名为 pt1, pt2, ... ) ,它们与 pt…
[RAII - Resource Acquisition Is Initialization] 获得一个资源的时候,不管这个资源是对象.内存.文件句柄或者其它什么,你都要在一个对象的构造函数中获得它, 并且在该对象的析构函数中释放它.当你创建资源的时候将它放入封装类对象构造函数(new出来的指针立即放入shared_ptr析造函数里), 当该对象离开作用域时,对象析构函数会自动销毁资源. [shared_ptr] 在shard_ptr使用中经常会发现,一个对象会有两次被析构的情况.其实这种是因为…
什么是RAII? RAII是Resource Acquisition Is Initialization的简称,是C++语言的一种管理资源.避免泄漏的惯用法. RAII又叫做资源分配即初始化,即:定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放. 为什么要使用RAII? 在计算机系统中,资源是数量有限且对系统正常运行具有一定作用的元素.比如:网络套接字.互斥锁.文件句柄和内存等等,它们属于系统资源.由于系统的资源是有限的…