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 ...
随机推荐
- HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.BadSqlGram
HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.BadSqlGram ...
- hibernate之关于使用连接表实现多对一关联映射
[Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...
- vps自己搭建VPN(转)
1.购买一个VPS: https://www.pzea.com/North-America-openvz-vps.html 2.下载putty软件,进行vpn安装: http://www.chiark ...
- Mercurial简介
前言 目前所在的公司的版本控制使用的是Mercurial,它也有一个对应的客户端小乌龟,但是Mercurial跟我们之前使用的SVN有着本质的区别,对于其区别会在下一篇中介绍到,这次主要是带领 ...
- leetcode第一刷_Pow(x, n)
高速乘方的算法,写了好多变,出了各种错,真是服了我自己了. 思想是每次对n减半,将当前的temp平方.须要注意的是假设当前的n是个奇数,减半之后会丢失掉一次乘积,因此假设当前的n为奇数,应该先在结果里 ...
- 编写高效的JavaScript
Web前端性能优化——编写高效的JavaScript 前言 随着计算机的发展,Web富应用时代的到来,Web 2.0早已不再是用div+css高质量还原设计的时代.自Gmail网页版邮件服务的问世 ...
- Mvc后台接收 参数
@Html.TextAreaFor(m => m.Emps, new { @class = "easyui-validatebox", @style = "heig ...
- 标准I/O缓冲:全缓冲、行缓冲、无缓冲
说明:我仅仅对网络资源进行了整合,方便学习-.- 基于流的操作终于会调用read或者write函数进行I/O操作.为了使程序的执行效率最高,流对象一般会提供缓冲区,以降低调用系统I/O库函数的次数. ...
- Cocos2d-X在SwitchControl使用
SwitchControl控制类中的一个开关的发挥了作用似在现实生活中开关 因为控制相对简单,我没有做过多的解释.直接在代码 首先在project文件夹下的Resource文件夹中加入三张图片 在Sw ...
- 【Web探索之旅】第四部分:Web程序员
内容简介 1.第四部分第一课:什么是Web程序员? 2.第四部分第二课:如何成为Web程序员? 3.第四部分第三课:成为优秀Web程序员的秘诀 第四部分:Web程序员(完结篇) 大家好.终于来到了[W ...