Boost程序库完全开发指南
一、Boost程序库总论
二、时间与日期
timer库:timer,progress_timer,progress_display。date_time库:在boost-date_time-special_defs.hpp下有特殊日期的定义。可创建日期,运算,日期输出,与tm格式转换等,日期点与长度可混合运算,日期区间是左闭右开区间,端点是两个date对象,日期迭代器如date_iterator,week_iterator等,时间有长度、时间点概念,也可与tm、time_t转换,也有时间区间,有时间迭代器。
三、内存管理
引导
RAII(Resource Acquisition Is Initialization),在使用资源的类的构造函数中申请,在析构中释放。以前是new后delete,这中间可能发生异常而不会delete,因此要在离开作用域时用try捕获并在catch中delete。
scoped
auto_ptr智能指针。scoped_ptr所有权不能转让,彼此间不能比较,有reset函数,但一般不要调用,有get()可获取原始指针,scoped_ptr是一个行为类似指针的对象,而不是指针,对一个对象delete是不允许的,scoped_ptr与auto_ptr都不能用于容器元素,后者因为其具有转移语义,而前者因为不支持拷贝和赋值。 scoped_array包装new[]分配的动态数组,为其提供一个代理,没有迭代器支持。
shared
shared最常用最重要的智能指针,实现引用计数型,可被拷贝、赋值,当没有引用对象时才删除,可用在标准容器中。其中一类构造函数shared_ptr(Y* p, D d)使用参数d指定析构时的定制删除器,而不是简单的delete。有unique,use_count(速度慢,不完全可靠,最好少用)两个函数。还可比较两个shared_ptr是否相等(基于内部保存的指针,相当于a.get()==b.get())。不能使用诸如static_cast<T>(p.get())的形式,会使转型后的指针无法再被shared_ptr管理,可用static_pointer_cast< T>(),const_pointer_cast< T>,dynamic_pointer_cast< T>()方式。由于只有new没有delete显示不对称,可用工厂模式来消息new的显示,在<boost/make_shared.hpp>
中提供了一个自由工厂函数make_shared< T>()。有两种方式将shared_ptr应用于标准容器中,一种将容器作为shared_ptr管理的对象如shared_ptr<list< T> >此方式与之前指针无区别,另一种是将shared_ptr作为容器的元素,如vector<shared_ptr < T> >。构造函数中指定的删除器可以是函数对象(函数名)或函数指针(函数名加地址符号)。如socket_t类的open_socket返回一个指针指向新创建的对象,而close_socket函数里完成资源释放工作,这时可socket_t s = open_socket(); shared_ptr<socket_t> p(s, close_socket),再如shared_ptr<file> fp(fopen("./1.txt", "r"), fclose);只要删除器格式符合d(p)就可。shared_array</file>