boost常用库的使用介的绍 第二讲.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
boost常用库的使用介的绍 第二讲

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

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档