首先我们看看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智能指针的对照的更多相关文章

  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. DRY

    DRY(Don't Repeat Yourself )原则   凡是写过一些代码的程序猿都能够意识到应该避免重复的代码和逻辑.我们通过提取方法,提取抽象类等等措施来达到这一目的.我们总能时不时的听到类 ...

  2. crm工作机会实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Crm.Sdk.Messages; public class Opport ...

  3. C++经典面试题(二)

    近期看一些面试题,认为假设自己被问到了,并不能非常利落的回答出来. 一是从来没有这个意识,二是没有认真的梳理下. 以下对这些题做出分析,哈!个人能力有限,当中难免有疏漏,欢迎大家补充咯. 11.引用与 ...

  4. BZOJ 1449 JSOI2009 球队收益 费用流

    题目大意:给定nn支球队.第ii支球队已经赢了winiwin_i场.输了loseilose_i场,接下来还有mm场比赛.每一个球队终于的收益为Ci∗x2i+Di∗y2iC_i*x_i^2+D_i*y_ ...

  5. Android数据库专家秘籍(七)经验LitePal查询艺术

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40153833 经过了多篇文章的学习,我们已经把LitePal中的绝大部分内容都掌握 ...

  6. HDU1237 简单的计算器 【堆】+【逆波兰式】

    简单的计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. DapperLambda发布

    DapperLambda发布 引言:因为接触过多个ORM,但使用的时候都遇到了各自的一些不够理想的地方,从最早开始开始公司自己分装的,到后面用EF,以及Dapper和DapperExtensions ...

  8. 正确使用Git Flow

    Git 在团队中的最佳实践--如何正确使用Git Flow 我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确 ...

  9. [小结][N种方法]实现WPF不规则窗体

    原文:[小结][N种方法]实现WPF不规则窗体 WPF实现不规则窗体,方法很多很多多.... 本文总结DebugLZQ认为简洁高效的几种方法 实现WPF不规则窗体的几种常用的方法如下: 1.使用Ble ...

  10. java学习笔记2015-6-6

    类与对象  (概念型  Demo演示)    面向对象   java  C++   包裹  承受  多态    分类  物    面向过程   C    结构体 1.获取用户输入  2.逻辑推断   ...