boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照
首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源:
- #include<boost/smart_ptr.hpp>
- #include<iostream>
- using namespace std;
- using namespace boost;
- struct posix_file
- {
- posix_file(const char * file_name)//一个文件类
- {
- cout<<"open file"<<file_name<<endl;//构造函数模拟打开文件
- }
- ~posix_file()//析构函数模拟关闭文件
- {
- cout<<"close file"<<endl;
- }
- };
- int main()
- {
- scoped_ptr<int> p(new int);//一个指向int变量的指针的scoped_ptr
- if(p)//在bool语境中測试指针是否有效
- {
- *p=10;//像一般指针一样使用解指针操作符*
- cout<<*p<<endl;
- }
- scoped_ptr<int> q(new int);//创建新的int指针的scoped_ptr
- *q=20;
- p.swap(q);//交换两个scoped_ptr指向的对象
- cout<<"p value:"<<*p<<endl<<"q value:"<<*q<<endl;
- p.reset();//置空scoped_ptr
- if(!p)
- {
- cout<<"scoped==null"<<endl;
- scoped_ptr<posix_file> fp(new posix_file("/temp/a.txt"));//局部scoped_ptr在作用域结束的时候自己析构
- }
- getchar();
- }
执行结果例如以下:
接下来,让我们看一看auto_ptr和scoped_ptr之间的联系和差别,同一时候,学者使用两者之间的指针控制权力转移
代码示比例如以下:
- #include<boost/scoped_ptr.hpp>
- #include<iostream>
- using namespace std;
- using namespace boost;
- int main()
- {
- auto_ptr<int> auto_p(new int(10));//一个int自己主动指针
- cout<<"auto_p value:"<<*auto_p<<endl;
- scoped_ptr<int> sp(auto_p);//从自己主动指针auto_ptr获得原始指针
- if(auto_p.get()==0)//原auto_ptr不再拥有指针
- cout<<"auto_p不再拥有指针"<<endl;
- cout<<"sp value:"<<*sp<<endl;
- auto_p.reset(new int(20));//auto_ptr获得新指针
- cout<<"auto_p<-->sp:"<<*auto_p<<"<-->"<<*sp<<endl;
- auto_ptr<int> auto_p2;
- auto_p2=auto_p;//auto_p2获得auto_p的原始指针,auto_p失去原始指针
- if(auto_p.get()==0)
- {
- cout<<"auto_p失去指针!"<<endl;
- }
- cout<<"auto_p2 value:"<<*auto_p2<<endl;
- //auto_ptr<int> auto_p3(sp);//auto_ptr无法取得scoped_ptr的指针
- //cout<<"auto_p3:"<<*auto_p3<<endl;
- //if(auto_p2.get()==0)//
- //{
- // cout<<"auto_ptr的auto_p2失去指针"<<endl;
- //}//
- //cout<<""<<*sp2<<endl;
- //sp2=sp;编译出错,无法相互赋值
- getchar();
- }
以下是执行结果,能够看出auto_ptr和auto_ptr能够相互移交指针,可是scoped_ptr能够从auto_ptr获得指针而不能反向从scoped_tr获得指针
boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照的更多相关文章
- STL--标准模板库--简要概述
STL--标准模板库 #include <vector> //头文件 STL(Standared Template Library)即标准模板库,惠普实验室开发的一系列软件的统称. ...
- c++ auto_ptr智能指针
c++ auto_ptr智能指针 该类型在头文件memory中,在程序的开通通过 #include<memory> 导入,接下来讲解该智能指针的作用和使用. 使用方法: auto_ptr& ...
- C++ auto_ptr智能指针的用法
C++中指针申请和释放内存通常采用的方式是new和delete.然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存.下面简单说一下用法. 用法一: std: ...
- Qt 智能指针学习(7种QT智能指针和4种std智能指针)
从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include <QApplication> #include <QLabel> int main(int arg ...
- shared_ptr 和auto_ptr智能指针
shared_ptr:计数的智能指针 它是一个包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时 ...
- 【VS开发】【C++开发】正确使用auto_ptr智能指针
1, auto_ptr类 auto_ptr是一个模板类,定义如下: template <typename Type>class auto_ptr {...}: 它存储的是一个指向Type的 ...
- c++ auto_ptr 智能指针
c++使用智能指针应该保证无论在何种情况下,只要自己被摧毁,就一定连带释放其所有资源,而由于智能型指针本身就是区域变量, 所以无论是正常退出,还是异常退出,只要函数退出,它就一定销毁 常数型auto_ ...
- C++之Boost准标准库配置
下载安装 进入官网下载地址:https://www.boost.org/users/download/ 本教程直接下载官方已编译库,不涉及源代码手动编译 点击官方编号好的链接,然后进入一个下载地址:h ...
- boost准模板库内存管理中pool和object_pool的使用
首先,在敲代码之前,必须改动一个问题.要不然,无法链接: boost安装文件夹:D:\boost. 找到D:\boost\boost_1_55_0\include\boost-1_55\b ...
随机推荐
- SO_REUSEADDR 套接字选项应用
在网络上的SO_REUSEADDR套接字选项是用来解决地址问题重用了大量的信息.但仅仅停留在文字的表达.并没有实例,非常easy误导谁刚开始学习,和不解,此处不再赘述. 的使用该选项,以及须要注意的问 ...
- Sql还原数据库出现3154错误
要先知道还原的数据库的名字 然后在数据库中新建一个那个名字的数据库, his 是数据库的名字!! RESTORE DATABASE his FROM DISK = 'E:\RDHL文件\HIS相关文档 ...
- ECToch随笔
1.去掉后台Powered by ECTouch.Cn mobile\include\apps\admin\view\index.php第五行<title>{$lang['cp_home' ...
- log4j 实例 , 浅析
一.新建log4j.propperties,放在工程的src目录下. #fileAppender log4j.rootCategory = DEBUG,file,consoleAppender log ...
- 802.11(wi-fi)的PHY层(编码与调制方法)
版本概要: 802.11-2007是目前的基础版本,之前的过时版本不考虑. 2009是较新的版本,就是目前最普及的802.11n.(100Mb/s) 2012就是传说中的802.11ac,工作在5G, ...
- ovs处理openflow消息的流程
OVS处理各个openflow消息的详细代码在 ofproto/ofproto.c 中: static enum ofperr handle_openflow__(struct ofconn *ofc ...
- centos6.4设备hadoop-2.5.1(完全分布式)
环境介绍: 在这两种装备centos6.4(32位置)的server安装Hadoop-2.5.1分布式集群(2台机器,主要试验用.哈哈). 1.改动主机名和/etc/hosts文件 1)改动主机名(非 ...
- WebService什么?
一.前言 我们或多或少都听过WebService(Web服务),有一段时间非常多计算机期刊.书籍和站点都大肆的提及和宣传WebService技术.当中不乏非常多吹嘘和做广告的成分.可是不得不承认的是W ...
- Harry Potter and the Prisoner of Azkaban
称号:Harry Potter and the Prisoner of Azkaban 作者:J.K. Rowling 篇幅: 448页 蓝思值:880L 用时: 11天 工具: 有道词典 [ ...
- 第九讲:HTML5该canvas推箱子原型实现
<html> <head> <title>动</title> <script src="../js/jscex.jscexRequire ...