首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源:

  1. #include<boost/smart_ptr.hpp>
  2. #include<iostream>
  3. using namespace std;
  4. using namespace boost;
  5. struct posix_file
  6. {
  7. posix_file(const char * file_name)//一个文件类
  8. {
  9. cout<<"open file"<<file_name<<endl;//构造函数模拟打开文件
  10. }
  11. ~posix_file()//析构函数模拟关闭文件
  12. {
  13. cout<<"close file"<<endl;
  14. }
  15. };
  16. int main()
  17. {
  18. scoped_ptr<int> p(new int);//一个指向int变量的指针的scoped_ptr
  19. if(p)//在bool语境中測试指针是否有效
  20. {
  21. *p=10;//像一般指针一样使用解指针操作符*
  22. cout<<*p<<endl;
  23. }
  24. scoped_ptr<int> q(new int);//创建新的int指针的scoped_ptr
  25. *q=20;
  26. p.swap(q);//交换两个scoped_ptr指向的对象
  27. cout<<"p value:"<<*p<<endl<<"q value:"<<*q<<endl;
  28. p.reset();//置空scoped_ptr
  29.  
  30. if(!p)
  31. {
  32. cout<<"scoped==null"<<endl;
  33. scoped_ptr<posix_file> fp(new posix_file("/temp/a.txt"));//局部scoped_ptr在作用域结束的时候自己析构
  34. }
  35. getchar();
  36. }

执行结果例如以下:

接下来,让我们看一看auto_ptr和scoped_ptr之间的联系和差别,同一时候,学者使用两者之间的指针控制权力转移

代码示比例如以下:

  1. #include<boost/scoped_ptr.hpp>
  2. #include<iostream>
  3. using namespace std;
  4. using namespace boost;
  5. int main()
  6. {
  7. auto_ptr<int> auto_p(new int(10));//一个int自己主动指针
  8. cout<<"auto_p value:"<<*auto_p<<endl;
  9. scoped_ptr<int> sp(auto_p);//从自己主动指针auto_ptr获得原始指针
  10. if(auto_p.get()==0)//原auto_ptr不再拥有指针
  11. cout<<"auto_p不再拥有指针"<<endl;
  12. cout<<"sp value:"<<*sp<<endl;
  13. auto_p.reset(new int(20));//auto_ptr获得新指针
  14. cout<<"auto_p<-->sp:"<<*auto_p<<"<-->"<<*sp<<endl;
  15. auto_ptr<int> auto_p2;
  16. auto_p2=auto_p;//auto_p2获得auto_p的原始指针,auto_p失去原始指针
  17. if(auto_p.get()==0)
  18. {
  19. cout<<"auto_p失去指针!"<<endl;
  20. }
  21. cout<<"auto_p2 value:"<<*auto_p2<<endl;
  22. //auto_ptr<int> auto_p3(sp);//auto_ptr无法取得scoped_ptr的指针
  23. //cout<<"auto_p3:"<<*auto_p3<<endl;
  24. //if(auto_p2.get()==0)//
  25. //{
  26. // cout<<"auto_ptr的auto_p2失去指针"<<endl;
  27. //}//
  28. //cout<<""<<*sp2<<endl;
  29. //sp2=sp;编译出错,无法相互赋值
  30. getchar();
  31. }

以下是执行结果,能够看出auto_ptr和auto_ptr能够相互移交指针,可是scoped_ptr能够从auto_ptr获得指针而不能反向从scoped_tr获得指针



  1.  

boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照的更多相关文章

  1. STL--标准模板库--简要概述

    STL--标准模板库 #include <vector>     //头文件 STL(Standared Template Library)即标准模板库,惠普实验室开发的一系列软件的统称. ...

  2. c++ auto_ptr智能指针

    c++ auto_ptr智能指针 该类型在头文件memory中,在程序的开通通过 #include<memory> 导入,接下来讲解该智能指针的作用和使用. 使用方法: auto_ptr& ...

  3. C++ auto_ptr智能指针的用法

    C++中指针申请和释放内存通常采用的方式是new和delete.然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存.下面简单说一下用法. 用法一: std: ...

  4. Qt 智能指针学习(7种QT智能指针和4种std智能指针)

    从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include <QApplication> #include <QLabel> int main(int arg ...

  5. shared_ptr 和auto_ptr智能指针

    shared_ptr:计数的智能指针 它是一个包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时 ...

  6. 【VS开发】【C++开发】正确使用auto_ptr智能指针

    1, auto_ptr类 auto_ptr是一个模板类,定义如下: template <typename Type>class auto_ptr {...}: 它存储的是一个指向Type的 ...

  7. c++ auto_ptr 智能指针

    c++使用智能指针应该保证无论在何种情况下,只要自己被摧毁,就一定连带释放其所有资源,而由于智能型指针本身就是区域变量, 所以无论是正常退出,还是异常退出,只要函数退出,它就一定销毁 常数型auto_ ...

  8. C++之Boost准标准库配置

    下载安装 进入官网下载地址:https://www.boost.org/users/download/ 本教程直接下载官方已编译库,不涉及源代码手动编译 点击官方编号好的链接,然后进入一个下载地址:h ...

  9. boost准模板库内存管理中pool和object_pool的使用

    首先,在敲代码之前,必须改动一个问题.要不然,无法链接: boost安装文件夹:D:\boost.       找到D:\boost\boost_1_55_0\include\boost-1_55\b ...

随机推荐

  1. SO_REUSEADDR 套接字选项应用

    在网络上的SO_REUSEADDR套接字选项是用来解决地址问题重用了大量的信息.但仅仅停留在文字的表达.并没有实例,非常easy误导谁刚开始学习,和不解,此处不再赘述. 的使用该选项,以及须要注意的问 ...

  2. Sql还原数据库出现3154错误

    要先知道还原的数据库的名字 然后在数据库中新建一个那个名字的数据库, his 是数据库的名字!! RESTORE DATABASE his FROM DISK = 'E:\RDHL文件\HIS相关文档 ...

  3. ECToch随笔

    1.去掉后台Powered by ECTouch.Cn mobile\include\apps\admin\view\index.php第五行<title>{$lang['cp_home' ...

  4. log4j 实例 , 浅析

    一.新建log4j.propperties,放在工程的src目录下. #fileAppender log4j.rootCategory = DEBUG,file,consoleAppender log ...

  5. 802.11(wi-fi)的PHY层(编码与调制方法)

    版本概要: 802.11-2007是目前的基础版本,之前的过时版本不考虑. 2009是较新的版本,就是目前最普及的802.11n.(100Mb/s) 2012就是传说中的802.11ac,工作在5G, ...

  6. ovs处理openflow消息的流程

    OVS处理各个openflow消息的详细代码在 ofproto/ofproto.c 中: static enum ofperr handle_openflow__(struct ofconn *ofc ...

  7. centos6.4设备hadoop-2.5.1(完全分布式)

    环境介绍: 在这两种装备centos6.4(32位置)的server安装Hadoop-2.5.1分布式集群(2台机器,主要试验用.哈哈). 1.改动主机名和/etc/hosts文件 1)改动主机名(非 ...

  8. WebService什么?

    一.前言 我们或多或少都听过WebService(Web服务),有一段时间非常多计算机期刊.书籍和站点都大肆的提及和宣传WebService技术.当中不乏非常多吹嘘和做广告的成分.可是不得不承认的是W ...

  9. Harry Potter and the Prisoner of Azkaban

    称号:Harry Potter and the Prisoner of Azkaban 作者:J.K. Rowling 篇幅: 448页 蓝思值:880L 用时:    11天 工具:  有道词典 [ ...

  10. 第九讲:HTML5该canvas推箱子原型实现

    <html> <head> <title>动</title> <script src="../js/jscex.jscexRequire ...