C++标准库智能指针.doc

C++标准库智能指针.doc

ID:48476178

大小:81.50 KB

页数:17页

时间:2020-02-04

C++标准库智能指针.doc_第1页
C++标准库智能指针.doc_第2页
C++标准库智能指针.doc_第3页
C++标准库智能指针.doc_第4页
C++标准库智能指针.doc_第5页
资源描述:

《C++标准库智能指针.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C++标准库智能指针(std::auto_ptr)智能指针两大特性:1.构造栈对象的生命期控制堆上构造的对象的生命期2.通过release来保证auto_ptr对对象的独权.另必须使用显示构造文章结构:一、剖析C++标准库智能指针(std::auto_ptr)   1.DoyouSmartPointer?   2.std::auto_ptr的设计原理   3.std::auto_ptr高级使用指南   4.你是否觉得std::auto_ptr还不够完美?-------------------------------------------------------

2、--------------一、剖析C++标准库智能指针(std::auto_ptr)      1.DoyouSmartPointer?     SmartPointer,中文名:智能指针,舶来品?     不可否认,资源泄露(resourceleak)曾经是C++程序的一大噩梦.垃圾回收     机制(GarbageCollection)一时颇受注目.然而垃圾自动回收机制并不能     满足内存管理的即时性和可视性,往往使高傲的程序设计者感到不自在.     况且,C++实现没有引入这种机制.在探索中,C++程序员创造了锋利的     "SmartPoint

3、er".一定程度上,解决了资源泄露问题.     也许,经常的,你会写这样的代码:     //x拟为class:     //           classx{     //           public:            //                  intm_Idata;     //           public:     //                  x(intm_PARAMin):m_Idata(m_PARAMin){}     //                  voidprint(){cout<

4、ta<DoSomething();    //#2     deletem_PTRx;     }     是的,这里可能没什么问题.可在复杂、N行、m_PTRclassobj所指对象生命周     期要求较长的情况下,你能保证你不会忘记deletem_PTRclassobj吗?生活中,     我们往往不应该有太多的口头保证,我们需要

5、做些真正有用的东西.还有一个     更敏感的问题:异常.假如在#2方法执行期异常发生,函数执行终止,那么new     出的对象就会泄露.于是,你可能会说:那么就捕获异常来保证安全性好了.     你写这样的程式:     voidfook(){     A*m_PTRx=newA(m_PARAMin);     try{         m_PTRx->DoSomething();     }     catch(..){         deletem_PTRx;         throw;     }     deletem_PTRx;     }  

6、   哦!天哪!想象一下,你的系统,是否会象专为捕获异常而设计的.     一天,有人给你建议:"用SmartPointer,那很安全.".你可以这样重写你的程序:        voidfook(){     auto_ptrm_SMPTRx(newx(m_PARAMin));     m_SMPTRx->DoSomething();     }     OK!你不太相信.不用delete吗?     是的.不用整天提心吊胆的问自己:"我全部delete了吗?",而且比你的delete     策略更安全.     然后,还有人告诉你,可以这样用呢:  

7、   ok1.     auto_ptrm_SMPTR1(newx(m_PARAMin));     auto_ptrm_SMPTR2(m_SMPTR1); //#2     Maybeyoucancode#2likethis:         auto_ptrm_SMPTR2;         m_SMPTR2=m_SMPTR1;          ok2.     auto_ptrm_SMPTR1(newint(32));          ok3.     auto_ptrm_SMPTR1;     m_SMPTR1=

8、auto_ptr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。