boost库简要笔记

一、时间和日期:

   1.Timer库包含三个组件,分别是timerprogress_timerprogress_display

  timer类:

几个主要接口:elapsed_max()返回最大可度量的时间,elapsed_min()返回最小可度量时间和elapsed()返回实际已经流逝的时间,timer对象从声明开始,构造就启动了计时操作。Restart()重新开始计时。

注意:不适合高精度的时间测量任务,其精度依赖于操作系统,也不适合大跨度时间段的测量。

 

  Progress_timer类:继承自timer,但使用更简单,只需要声明progress_timer对象则可;程序退出时,对象的析构自动输出流逝的时间。

  

  Progress_display类:其构造接收一个long型的数字,表示用于进度显示的基数。

注意:程序进行进度显示时,程序不能有输出,否则进度显示会混乱

 

2.date_time库:

      Date类:常规用法,可以和c语言的tm结构相互转换

      Date_duration类:日期长度类;typedef Date_duration days;类似地还有months,yeasr,weeks几个类。

      Date_period类:日期区间类;

      日期迭代器类:date_iteratorweek_iteratoryear_iterator

      时间的处理:time_duration类和ptime类;

      时间区间:time_period;

      时间迭代器:time_iterator

二、内存管理 

1. Smart_ptr库:

包括scoped_ptrscoped_arrayshared_ptrshared_arrayweak_ptrintrusive_ptr。对于所指类型TT的析构函数不能抛出异常。

Scoped_ptr:不能转让所有权;其拷贝构造和赋值操作符都被声明为私有。也不支持比较操作。

Reset()函数:重置scoped_ptr; 

Get()函数:返回scoped_ptr内部保存的原始指针;但注意不能对其进行delete操作,否则scoped_ptr析构时会再次进行删除操作。

bool语境中自动转换成bool值。可代替与空指针的比较操作。

例如:if (p)  或 if(!p) 

auto_ptr的区别:都不能用作容器的元素,auto_ptr是因为转移语义,scoped_ptr是因为不支持拷贝和赋值。其根本性区别在于指针的所有权。Scoped_ptr可以从一个auto_ptr中获取指针所有权,反过来不行。

 

Scoped_array:指向数组的智能指针。

   与scoped_ptr用法类似,不同处在于使用new[]delete[]; 且不支持*->运算。只能通过[]去存取元素。

Shared_ptr:非常有用;可以安全的放到标准容器中,可以被自由的拷贝和赋值。可以进行Shared_ptr之间的比较。提供<比较。因此可被用于标准关联容器。支持类型转换:

Dynamic_pointer_caststatic_pointer_cast等;

Reset函数:将引用计数减1,停止对指针的共享,当引用计数为0时,发生删除操作。

Unique()函数:在shared_ptr是指针的唯一所有者时返回true

Use_count()函数:返回当前指针的引用计数。

指针的输出:<<的操作符输出内部指针的地址。

工厂函数:make_shared比直接创建shared_ptr对象的方式快且高效

Allocate_sharedmake_shared多接收一个定制的内存分配器类型参数。

Shared_ptr与标准容器的结合:将容器作为管理对象;作为容器的元素。

 

应用于桥接模式;

应用于工厂模式;

 

定制删除器:将回收资源不是用delete时,例如:关闭句柄;删除器可以是函数对象,也可以是函数指针。

Get_deleter()返回一个删除器的指针。

 

Shared_ptr<void>可以存储void*型指针,可以容纳任意类型。使用时,用static_pointer_cast等转型函数去转型。

 

Shared_array:不建议使用

shared_ptr用法类似,不同处在于使用new[]delete[]; 且不支持*->运算。只能通过[]去存取元素。

Weak_ptr:可以从shared_ptrweak_ptr获取对象,但不会影响引用计数。

不能使用*->

Use_count函数:观测资源的引用计数。

Expired()函数:判断shared_ptr管理的资源是否存在。《==use_count==0;

Lock函数:返回一个shared_ptr对象,当expried()返回true时,lock返回一个存储空指针的shared_ptr

获得thisshared_ptr:有何作用???

 

Intrusive_ptr

 

2.pool库:包含pool、分配类实例的object_pool、单件内存池singleton_pool和可用于标准库的pool_alloc

     Pool:可以返回一个简单数据类型(POD)的内存指针。只能作为普通数据类型intdouble等的内存池,不能应用于复杂的类和对象。

         Get_requested_size():返回每次pool分配内存块的大小。

         Malloc():从内存池中任意分配一个内存块。

         Ordered_malloc()则在分配的同时合并空闲块链表。其带参数的形式可以连续分配n块内存。

    Is_from():测试是否从这个内存池分配出去的。

    Free():用来手工释放之前分配的内存块。一般情况下不需要手动释放,除非认为内存池空间已经不足,必须释放已经分配的内存。

    Release_memory():让内存池释放所有未被分配的内存,已经分配的不受影响。一般情况下不应该手动调用。

    Purge_memory():强制释放pool持有的所有内存。一般情况下不应该手动调用。

 

Object_pool类:

    最主要的函数:construct()destroy()函数。

     Construct:先调用malloc分配内存,再使用传入的参数调用类的构造,返回一个已经初始化的对象指针。

     Destroy()函数:先调用对象的析构,再用free释放内存块。

Singleton_pool类:

Pool_alloc类:提供了两个可用于标准容器模板参数的内存分配器,分别是pool_allocfast_pool_allocator


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值