• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2021-08-21 12:52 Aet 隐藏边栏 |   抢沙发  6 
文章评分 4 次,平均分 5.0

timer

timer

  1. 毫秒级别的精度。
  2. <boost/timer.hpp>
  3. using namespace boost;

progress_timer

  1. 派生自timer。
  2. 会在析构时自动输出流逝的时间。
  3. <boost/progress.hpp>
  4. using namespace boost;

progress_display

  1. 在控制台显示程序的执行进度。
  2. <boost/progress.hpp>
  3. using namespace boost;
  4. 缺陷:无法把进度显示输出和程序的输出分离。

data_timer

  1. 格力高利历:支持从1400-01-01到9999-12-31。

special_values

  1. 枚举
  2. pos_infin
  3. neg_infin
  4. not_a_date_time
  5. min_date_time
  6. max_date_time

gregorian

  1. <boost/date_time/gregorian/gregorian.hpp>
  2. using namespace boost::gregorian;

posix_time

  1. <boost/date_time/posix_time/posix_time.hpp>
  2. using namespace boost::posix_time;

date

  1. 以天为单位表示时间。
  2. to_simple_string
    1. YYYY-mmm-DD
  3. to_iso_string
    1. YYYYMMDD
  4. to_iso_extended_string
    1. YYYY-mmm-DD
  5. to_tm
  6. date_from_tm

day_clock

  1. local_day()返回当天的本地日期。
  2. universal_day()返回当天的UTC日期。

date_period

  1. 日期周期。

time_duration

  1. 时间长度。

ptime

  1. 处理时间。

内存管理

RAII机制

  1. 在类的构造函数里申请资源,然后使用,最终在析构函数中释放资源。

智能指针

  1. 智能指针可以在退出作用域时-不管是正常流程离开还是因异常离开,总调用delete来析构在堆上动态分配的对象。

auto_ptr

  1. 接受new操作符或对象工厂创建出的对象指针作为参数,代理原始指针。
  2. 当退出作用域或发生异常时,C++语言会保证auto_ptr对象销毁,调用析构函数,使用delete操作符删除原始指针并释放资源。
  3. 缺陷
    1. 不要使用auto_ptr指向基本数据类型的对象。
    2. 不要使两个auto_ptr指向同一个对象。
    3. 不要使用auto_ptr对象保存动态分配数组的指针。
    4. 不要将auto_ptr对象存储在容器中。
      因为auto_ptr的复制和赋值具有破坏性,不满足容器要求。(赋值或复制后,两个对象必须具有相同值)

scoped_ptr

  1. include <boost/smart_ptr.hpp>

  2. 一个类似auto_ptr和unique_ptr的智能指针,保证了new操作符在堆上分配的动态对象在任何时候都能被正确删除。
  3. 但是,一旦scoped_ptr获取了对象的管理权,我们无法再从它那里取回来。不允许拷贝和赋值。
  4. 如果一个类持有scoped_ptr的成员变量,那么它也会是不可拷贝和赋值的。

scoped_array

shared_ptr

概述

  1. 和scoped_ptr一样包装了new操作符在堆上分配的对象,但它实现的是引用计数型的智能指针,可以自由拷贝和赋值,当引用计数为0的时候,才删除被包装的动态分配的对象。
  2. shared_ptr的reset的作用是对引用计数减1,除非引用计数为0,否则不会发生删除操作。
  3. unique在shared_ptr是指针的唯一所有者时返回true,和use_count相比,更快,更可靠。
  4. shared_ptr提供了基本的线程安全保证,集被多个线程安全读取,但对其他的访问形式是未定义的。
  5. make_shared
  6. shared_ptr能够存储void型的指针,而void\型的指针,可以指向任意类型,因此,shared_ptr就像一个泛型的指针容器一样,拥有容纳任意类型的能力。

应用

shared_array

weak_ptr

概述

  1. weak_ptr是为了配合shared_ptr而引入的一种智能指针,它更像是个shared_ptr的助手而不是智能指针,因为它不具备普遍指针的行为。
  2. weak_ptr可以从一个shared_ptr或另一个weak_ptr对象构造,获得资源的观测权。它的构造不会引起指针引用计数的增加。析构也不会减少引用计数的值。
  3. 不过可以通过它的lock函数从被观测的shared_ptr获得一个shared_ptr对象,把弱关系转变为强关系,从而操作资源。
    当expired为true的时候,lock获得的是一个存储空指针的shared_ptr。

intrusive_ptr

  1. 另外一种引用技术型智能指针。
  2. 不直接管理引用计数,而是通过intrusive_ptr_add_ref来增加引用计数,通过intrusive_ptr_release来减少引用计数来简介管理。

pool

概述

  1. 内存池预先分配了一块大的内存空间,然后就可以在其中使用某种算法高效快速的自定制内存分配。
  2. pool库在需要大量地考虑分配/释放小对象时很有效率,而且完全不需要考虑delete。

简单的pool

  1. 构造传一个size_t的requested_size指示每次分配内存块的大小(不是内存池的大小)。
  2. malloc分配内存块。
  3. ordered_malloc在分配内存的同时合并空闲块链表。
  4. release_memory让内存池释放所有未被分配的内存。
  5. purge_memory强制释放pool所持有的所有内存,不管内存是否在被使用。
  6. 只能作为普通数据类型的内存池。

object_pool

  1. object_pool是用于类实例(对象)的内存池。会在析构时对所有已经分配的内存块调用析构函数。

singleton_pool

pool_alloc

  1. 提供两个可用于标准容器模板参数的内存分配器。
    1. pool_alloc
    2. fast_pool_allocator
  2. 当内存分配失败时会抛出std::bad_alloc异常。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享