- 1、本文档共74页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
参考资料--boot应用初探
BOOST应用初探
作者:冯刚
2011-8-4
背景
BOOST是由c++标准化委员会成员参与开发的c++标准的准官方库,他是C++标准库的发动机。下一代C++标准C++0x的标准库很多来自于boost。Boost库覆盖了广泛的领域,从数学库到智能指针,从模板元编程库到预处理器库及语法词法分析,从线程到lambda表达式,等等。所有Boost库都具有宽松的许可证,确保库可以被自由使用于商用软件。
功能
概况
Boost库涵盖了很广泛的领域,下面就常用的功能像智能指针,正则表达式,函数对象bind和function, 线程和线程池,时间日期,多索引容器,哈希容器,bimap,日志,内存池,模板元编程,循环缓冲区,tuple, 观察者模式signal2,网络通讯asio做一些介绍。
功能
智能指针
概论
smart pointers(智能指针)是存储“指向动态分配(在堆上)的对象的指针”的对象。他们的行为很像 C++ 的内建指针,只是它们可以在适当的时候自动删除它们所指向的对象。智能指针在面对异常时有非常显著的作用,它们可以确保动态分配对象的完全析构。它们还可以用于跟踪多主人共享的动态分配对象。
在概念上,智能指针可以看作拥有它所指向的对象,并因此在对象不再需要时负责将它删除。
智能指针库提供了六个智能指针类模板:
scoped_ptr boost/scoped_ptr.hpp 简单的单一对象的唯一所有权。不可拷贝。 scoped_array boost/scoped_array.hpp 简单的数组的唯一所有权。不可拷贝。 shared_ptr boost/shared_ptr.hpp 在多个指针间共享的对象所有权。 shared_array boost/shared_array.hpp 在多个指针间共享的数组所有权。 weak_ptr boost/weak_ptr.hpp 一个属于 shared_ptr 的对象的无所有权的观察者。 intrusive_ptr boost/intrusive_ptr.hpp 带有一个侵入式引用计数的对象的共享所有权。 这些模板被设计用来补充 std::auto_ptr 模板的不足。
智能指针shared_ptr
shared_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_ptrT 就能被隐式地转换到 shared_ptrU。特别是,shared_ptrT 隐式转换到 shared_ptrT const,当 U 是 T 的一个可访问基类的时候,还能转换到 shared_ptrU,以及转换到 shared_ptrvoid。
惯用手法
由于智能指针是线程安全的,建议在代码里只为一个对象生成单一的shared_ptr,在多线程环境中传递参数时使用weak_ptr,这样当shared_ptr被析构,weak_ptr也会得到通知,变为无效,这样可以有效地防止野指针,同时也防止了潜在的循环引用,无法释放对象的问题。
shared_ptrA spA = shared_ptrA(new A);
int func(weak_ptrA wpA)
{
If(!wpA.expired())
{
//正常处理逻辑
shared_ptrA spA = wpA.lock();
//Use spA
}
else
{
//智能指针
您可能关注的文档
- 医学ppt--第26章-作用于呼系统的药物.ppt
- 医学ppt--第三十章部损伤病人的护理.ppt
- 医学ppt--第三章外科病人的体液酸碱平衡失调第八版.ppt
- 医学ppt--第六章艾达·j奥兰多的护理程序理论.ppt
- 医学ppt--第六章护理本科老年人休息与活动.ppt
- 医学ppt--第四躯干骨折.ppt
- 医学ppt--第神经外科手术的麻醉.ppt
- 医学ppt--第六章第四躯干骨折学生版.ppt
- 医学ppt--第章孕期保健、营养与优生.ppt
- 医学ppt--糖尿病患者饮食护理.ppt
- 五位一体教案教学教案设计.docx
- 思修与法基-教学教案分享.pptx
- 大学军事之《中国国防》题库分享.docx
- 2023版毛泽东思想和中国特色社会主义理论体系概论第五章-中国特色社会主义理论体系的形成发展.pdf
- 思修与法基 教学全案分享.docx
- 大学军事之《军事思想》题库分享.docx
- 《经济思想史》全套课件-国家级精品课程教案课件讲义分享.pdf
- 厦门大学国际金融全套资料(国家级精品课程)--全套课件.pdf
- 2023版毛泽东思想和中国特色社会主义理论体系概论第五章-中国特色社会主义理论体系的形成发展.docx
- 2023版毛泽东思想和中国特色社会主义理论体系概论第五章中国特色社会主义理论体系的形成发展分享.pdf
文档评论(0)