Boost库的学习(一)

时间和日期的处理一直是很麻烦的问题,在boost库中有专门的对象来解决该问题timer,progress_timer,progress_display,date;

下面分别说明:timer简单的计时器类,可做秒表-----

       progress_timer这个是进度计时器,只需要构造在生命周期结束时自动结束计时并printout;

       progress_display是个图形的进度计时器,但需要注意不能混合用于有shell输出的类或者函数,他会导致图形混乱;

       date     以上都是时间,这个是日期处理的。

内存管理,智能指针

在c++标准库中有个auto_ptr的智能指针,但是他在赋值时产生所有权转移因此不能用于容器,和他类似的是boost::scoped_ptr,但后者是不能发生拷贝构造和赋值;

boost::scoped_array该类为指向数组的智能指针,和scoped_ptr类似区别是使用new[]构造,delete[]释放管理动态数组。该类应该避免使用。

重点:boost::shared_ptr智能指针类能用于标准的容器中,同时仅仅只支持“<”操作符,其他操作符部支持。boost::make_shared工厂函数用于生产多个new shared_ptr操作

  typedef vector<shared_ptr<int> > vs;
  vs v(10);
  int i = 0;
  for(vs::iterator pos = v.begin(); pos != v.end(); ++pos)
    {
      (*pos) = make_shared<int> (++i);
      cout << *(*pos) << ",";
    }
  cout << endl;
  shared_ptr<int> p = v[9];
  *p = 100;
  cout << *v[9] << endl;

桥接模式,工厂模式; 定制删除器shared_ptr<FILE> fp(fopen("xx.txt","r"), fclose);在释放时不是采用delete去释放资源而是调用定制的函数,此处为fclose();

Boost::shared_array 类似如shared_ptr和scoped_array的结合体,有他们的优点同时有他们的缺点 下标操作不会检查安全性导致未知结果。

Boost::weak_ptr类是协同shared_ptr一起工作的,作为一个良好的观察员他不共享指针,不操作资源。(只做一个安静的“美男子”),可用lock()成员函数来获取一个shared_ptr指针

时间: 2024-09-28 06:51:39

Boost库的学习(一)的相关文章

Boost库的学习(二)

内存池:pool 用于分配无需构造的对象,如int ,char ,double等,pool<> p<sizeof(int)> 一个可分配内存池:然后调用p.malloc()进行内存分配(p != NLL 用来判断是否申请成功).无需手动free() 生命周期结束时自动释放. object_pool内存池对象.可用construct成员函数来构造参数不超过三个的类对象.(默认).调用malloc不会调用构造函数,不会初始化各个值. singleton_pool pool_alloc

c++ boost库学习三:实用工具

noncopyable 大家都知道定义一个空类的时候,它实际包含了构造函数,拷贝构造函数,赋值操作符和析构函数等. 这样就很容易产生一个问题,就是当用户调用A a(“^_^") 或者A c="^_^" 时会发生一些意想不到的行为,所以很多时候我们需要禁用这样的用法. 一种方法就是把拷贝构造函数和赋值操作符显式的定义为private,但是这样需要很多代码. 于是boost库为大家提供了一个简单的方法:只需要将类继承于noncopyable就可以了. #include "

boost库学习之regex

一.背景 项目中许多地方需要对字符串进行匹配,比如根据指定的过滤字符串来过滤文件名.刚开始是排斥使用boost库的,第一,我不熟悉boost库:第二,如果引入第三方库,就会增加库的依赖,这样的后果是,要么打包程序时,打包动态库,要么直接使用静态库编译,会使增大程序的大小. 刚开始是尝试自己写模糊匹配算法,很简单,就只支持_和%,这两个通配符,然后发现Linux下有一个fnmatch的函数,就是进行模糊匹配的,它支持shell通配符. 但是到最后发现,当需要区别很相似的字符串时,模糊匹配就不行了,

Boost.Asio学习笔记一、linux下boost库的安装

学习开源库的第一步就是,编译安装,然后我们才能写一写demo去测试. 所以本章我们学一下在linux编译安装Boost库,为了方便起见,直接安装完整库. 我使用的版本是boost_1_55_0,版本差别不大. [[email protected] ~]$ tar -zxvf boost_1_55_0.tar.gz [[email protected] boost_1_55_0]$ ./bootstrap.sh --prefix=/home/mjf/lib [[email protected] b

Boost库学习之旅入门篇

学习及使用Boost库已经有一段时间了,Boost为我的日常开发中带来了极大的方便,也使得我越来越依赖于boost库了.但boost功能太多,每次使用还是得翻看以前的 资料,所以为了以后可以更方便的使用,在此对常用的功能作一个总结,也希望以此与大家共勉. boost库下载,Svn地址: http://svn.boost.org/svn/boost/trunk 编译源码 编译boost库自带脚本解释工具: 使用vs自带命令行工具Visual Studio 命令提示(2010),运行bat脚本boo

BOOST 库中filesyatem 库的学习

/*FileSyatem 库的学习 ------------------------------------------------------------------------------------------------------------库的使用方式 嵌入源码的形式: #define BOOST_SYSTEN_NO_LIB #define BOOST_FILESYSTEM_NO_LIB #include<boost\filesystem.hpp> ----------------

c++ boost库学习一:时间和日期

timer类 #include <boost\timer.hpp> #include "iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { boost::timer t; cout<<"max time span: "<<t.elapsed_max()/3600<<"h"<<endl; //596.5

boost库学习之开篇

本系列文章使用boost_1.58.0版本. 一.欢迎使用boost C++库 boost致力于提供一个免费的.便携的源代码级的库. 我们重视那些与C++标准一起工作良好的库.boost库将要成为一个应用广泛的库,成为应用程序可以依赖的平台.boost证书估计商业和非商业机构使用它. 我们的目标是建立已存在的练习而且提供对于库具体实现的引用以至于boost库适合于最后的标准.十个boost库已经包含在C++标准委员会的TR1而且将要被包含在即将到来的C++标准版本中.更多的boost库将目标放在

C++ Primer 学习笔记_56_STL剖析(十一)(原boost库):详解智能指针(unique_ptr(原scoped_ptr) 、shared_ptr 、weak_ptr源码分析)

注意:现在boot库已经归入STL库,用法基本上还和boost类似 在C++11中,引入了智能指针.主要有:unique_ptr, shared_ptr, weak_ptr. 这3种指针组件就是采用了boost里的智能指针方案.很多有用过boost智能指针的朋友,很容易地就能发现它们之间的关间: std boost 功能说明 unique_ptr scoped_ptr 独占指针对象,并保证指针所指对象生命周期与其一致 shared_ptr shared_ptr 可共享指针对象,可以赋值给shar