当前位置:文档之家› boost常用库使用介绍第二讲

boost常用库使用介绍第二讲

4、boost::shared_ptr支持所有权转移:
并且可以安全的存储在stl标准容器中,是在stl容器存储指针的标准解法。例如std::vector<int*> IntVec,使用 shared_ptr方式为std::vector<boost::shared_ptr<int> > IntptrVec.
6
第五节:shared_ptr类摘要
1、 构造函数,拷贝构造函数,赋值操作符以及析构函数
Template<class T> Class shared_ptr
{
/*******************构造函数*******************************************/
shared_ptr(); //创建一个持有空指针的shared_ptr,use_count() = 0&& get() == NULL
shared_ptr(shared_ptr const & r);
template<class Y> shared_ptr(shared_ptr<Y> const & r);
shared_ptr & operator=(shared_ptr const & r);
template<class Y> shared_ptr & operator=(shared_ptr<Y> const & r);
2、public 成员方法和操作符
Template<class T> class shared_ptr
{
T* get() const ;
//返回原始指针
T& operator * () const ; //返回原始指针的引用
T* operator ->() cosnt ; //返回原始指针
long use_count() const ; bool unique() const ;
/******************析构函数*******************************************/
//引用计数会减1,如果计数器为0,get() != NULL,有删除器的话会调用删除器,否则调用delete操作符
~shared_ptr();
7
第五节:shared_ptr类摘要
//返回引用计数 // 返回 use_count() == 1,是否唯一
operator bool() const ;
//bool值转型,可以用于条件判断,例如if(ptr){…}
void s b) //交换原始指针
void reset() ;
template<class Y> void reset(Y* p);
5
第四节:shared_ptr简介
3、boost::shared_ptr不需要手动的调用类似release方法:
它不像侵入式实现的智能指针一样需要手动的调用类似release方法,全部用由shared_ptr内部的计数器自动增减 ,这一点是非常有用的。(COM的IUnknow接口以及boost::intrusive_ptr<T>都是基于侵入式设计的智能指 针,需要手动调用类似release方法)
template<class Y, class D> void reset(Y* p);
}
8
第六节:shared_ptr的一个例子
1、#include <boost/shared_ptr.hpp>
《boost常用库的使用介绍》
第二讲:boost智能指针库
3D界面引擎负责人
第一节: C++程序员对内存管理的苦恼
1、内存泄漏(memory leak) 2、野指针(wild pointer) 3、访问越界(access violation)
boost的智能指针库就是内存管理的强劲解决方案
通过boost智能指针库,我们能够高效的进行内存管理,解决上述问题,同时彻底让你忘记栈(stack),堆(heap)等 内存相关的术语,并且还会发现,boost为c++提供的内存管理解决方案可能比java和c#等其他语言更好,更高效 !
template<class Y, class D> shared_ptr(Y* p, D d);
/******************拷贝构造函数及赋值操作符重载***********************/
//调用拷贝构造函数或赋值操作后,引用计数加1 && get() == r.get() && use_count() == e_count()
这种用构造函数申请资源用析构函数释放资源的做法或者说技术通常被称为“资源获取即初始化”。这样做的优点是 而易见的:对象创建后,用户能开始正确使用对象,不用担心对象的有效性或者是否还要作进一步的初始化操作。
3
第三节:Boost智能指针的分类:
boost 提供下列几种智能指针:
4
第四节:shared_ptr简介
//获得一个指向类型T的指针p的管理权,use_count == 1&&get() == p ,Y类型必须能够转换为T类型
template<class Y> explicit shared_ptr(Y* p);
பைடு நூலகம்
//作用同上,增加了一个构造参数D,是一个仿函数对象,代表删除器,该构造函数非常有用,后面会详解
2
第二节:智能指针与RAII机制
• 为了管理内存等资源,智能指针采用RAII机制(Resource Acquisition Is Initialization,资源获取既初始化)
1、 所有初始化操作移到对象的构造函数中 2、 所有的释放操作都放在对象的析构函数里。 3、 适当的异常处理代码来应付对象构造期间丢出的异常
1、boost::shared_ptr 是一个最像指针的“智能指针”:
是boost.smart_ptr中最有价值,最重要,也是最有用的类,boost库的其他许多类库都使用了shared_ptr, 所以毫无悬念的被收入了c++11标准中去。
2、boost::shared_ptr实现了计数引用:
它包装了new操作符在堆上分配的动态对象,但它实现了引用计数,可以自由的拷贝和赋值, 在任意地方共享它。当引用计数为0时,它会自动删除被包装的动态分配的对象。
相关主题