一、时间和日期:
1.Timer库包含三个组件,分别是timer、progress_timer和progress_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_iterator、week_iterator、year_iterator
时间的处理:time_duration类和ptime类;
时间区间:time_period;
时间迭代器:time_iterator
二、内存管理
1. Smart_ptr库:
包括scoped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr和intrusive_ptr。对于所指类型T,T的析构函数不能抛出异常。
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_cast和static_pointer_cast等;
Reset函数:将引用计数减1,停止对指针的共享,当引用计数为0时,发生删除操作。
Unique()函数:在shared_ptr是指针的唯一所有者时返回true。
Use_count()函数:返回当前指针的引用计数。
指针的输出:<<的操作符输出内部指针的地址。
工厂函数:make_shared比直接创建shared_ptr对象的方式快且高效
Allocate_shared比make_shared多接收一个定制的内存分配器类型参数。
Shared_ptr与标准容器的结合:将容器作为管理对象;作为容器的元素。
应用于桥接模式;
应用于工厂模式;
定制删除器:将回收资源不是用delete时,例如:关闭句柄;删除器可以是函数对象,也可以是函数指针。
Get_deleter()返回一个删除器的指针。
Shared_ptr<void>可以存储void*型指针,可以容纳任意类型。使用时,用static_pointer_cast等转型函数去转型。
Shared_array:不建议使用
与shared_ptr用法类似,不同处在于使用new[]和delete[]; 且不支持*和->运算。只能通过[]去存取元素。
Weak_ptr:可以从shared_ptr或weak_ptr获取对象,但不会影响引用计数。
不能使用*和->。
Use_count函数:观测资源的引用计数。
Expired()函数:判断shared_ptr管理的资源是否存在。《==》use_count==0;
Lock函数:返回一个shared_ptr对象,当expried()返回true时,lock返回一个存储空指针的shared_ptr。
获得this的shared_ptr:有何作用???
Intrusive_ptr:
2.pool库:包含pool、分配类实例的object_pool、单件内存池singleton_pool和可用于标准库的pool_alloc。
Pool类:可以返回一个简单数据类型(POD)的内存指针。只能作为普通数据类型int、double等的内存池,不能应用于复杂的类和对象。
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_alloc和fast_pool_allocator。