电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

BOOST应用初探VIP专享VIP免费

BOOST应用初探_第1页
BOOST应用初探_第2页
BOOST应用初探_第3页
BOOST应用初探作者:冯刚2011-8-41背景BOOST是由c++标准化委员会成员参与开发的c++标准的准官方库,他是C++标准库的发动机。下一代C++标准C++0x的标准库很多来自于boost。Boost库覆盖了广泛的领域,从数学库到智能指针,从模板元编程库到预处理器库及语法词法分析,从线程到lambda表达式,等等。所有Boost库都具有宽松的许可证,确保库可以被自由使用于商用软件。2功能2.1概况Boost库涵盖了很广泛的领域,下面就常用的功能像智能指针,正则表达式,函数对象bind和function,线程和线程池,时间日期,多索引容器,哈希容器,bimap,日志,内存池,模板元编程,循环缓冲区,tuple,观察者模式signal2,网络通讯asio做一些介绍。2.2功能2.2.1智能指针2.2.1.1概论smartpointers(智能指针)是存储“指向动态分配(在堆上)的对象的指针”的对象。他们的行为很像C++的内建指针,只是它们可以在适当的时候自动删除它们所指向的对象。智能指针在面对异常时有非常显著的作用,它们可以确保动态分配对象的完全析构。它们还可以用于跟踪多主人共享的动态分配对象。在概念上,智能指针可以看作拥有它所指向的对象,并因此在对象不再需要时负责将它删除。智能指针库提供了六个智能指针类模板:scoped_ptr简单的单一对象的唯一所有权。不可拷贝。scoped_array简单的数组的唯一所有权。不可拷贝。shared_ptr在多个指针间共享的对象所有权。shared_array在多个指针间共享的数组所有权。weak_ptr一个属于shared_ptr的对象的无所有权的观察者。intrusive_ptr带有一个侵入式引用计数的对象的共享所有权。这些模板被设计用来补充std::auto_ptr模板的不足。2.2.1.2智能指针shared_ptrshared_ptr类模板存储一个指向动态分配对象(一般是用C++new-expression生成的)的指针。在最后一个shared_ptr所指向的对象被销毁或重置时,要保证它所指向的对象被删除。每一个shared_ptr都符合C++标准库的CopyConstructible和Assignable的必要条件,并因此能够用于标准库容器。因为提供了比较操作,因此shared_ptr可以和标准库中的关联式容器一起工作。通常,一个shared_ptr不能正确地持有一个指向动态分配的数组的指针。关于那种用法请参见shared_array。因为在实现中使用了引用计数,shared_ptr实例的循环引用不会被回收。例如,如果main()持有一个指向A的shared_ptr,A又直接或间接持有一个指回A的shared_ptr,A的使用计数是2。最初的shared_ptr析构后将导致一个使用计数为1的A被悬挂。使用weak_ptr以“打破循环”。这个类模板被T参数化,T是被指向的对象的类型。shared_ptr和它的大多数成员函数对于T没什么要求,允许它是一个不完整类型,或者为void。对T有附加要求的成员函数(constructors,reset)都明确地记录在下面。只要T*能被隐式地转换到U*,则shared_ptr就能被隐式地转换到shared_ptr。特别是,shared_ptr隐式转换到shared_ptr,当U是T的一个可访问基类的时候,还能转换到shared_ptr,以及转换到shared_ptr。惯用手法由于智能指针是线程安全的,建议在代码里只为一个对象生成单一的shared_ptr,在多线程环境中传递参数时使用weak_ptr,这样当shared_ptr被析构,weak_ptr也会得到通知,变为无效,这样可以有效地防止野指针,同时也防止了潜在的循环引用,无法释放对象的问题。shared_ptrspA=shared_ptr(newA);intfunc(weak_ptrwpA){If(!wpA.expired()){//正常处理逻辑shared_ptrspA=wpA.lock();//UsespA}else{//智能指针已被其他线程释放}}func(spA);2.2.1.3智能指针weak_ptr简介weak_ptr是Boost智能指针shared_ptr的一个重要伙伴。它允许打破循环依赖。另外,它还可以处理一个非常常见的问题—悬空指针。当销毁最后一个智能指针shared_ptr,它会释放掉共享的资源。通过使用智能指针weak_ptr,这方面的信息会传播给所有观察该共享资源的智能指针weak_ptr,通过weak_ptr可以知道该共享资源已经释放,这意味着不会发生无意间...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部