配置器也是STL的重要内容。使用STL必然会涉及容器,而容器中存储了大量的数值,必然需要分配内存空间。配置器的作用就是为容器分配内存。
配置器最早是为将内存模型抽象化而提出的。所以使用内存配置器分配内存时,是按对象的个数进行的,而不是按字节数。这有别于原来的new[]和new操作符。配置器最大的优点在于:配置器实现了将算法、容器与物理存储细节分隔。配置器可以提供一套分配与释放内存的标准方式,并提供用作指针类型和引用类型的标准名称。目前而言,配置器仅是一种纯粹的抽象。行为上类似分配器的类型都可看作配置器。
C++STL提供了标准分配器,目的是为用户提供更多的服务。basic_string模板以及string类均提供了对常见配置器的相关支持。basic_string类模板中包含1个配置器类型的成员allocator_type。对于string对象,allocator_type可以作为配置器类的对象使用;对string类而言,allocator_type等价于allocator<char>,即分配数据类型为char的内存,便于string类的对象存储char型字符。
同时basic_string类模板的第3个参数也是配置器模板参数。basic_string类模板的形式如下:
而string类的声明形式如下:
对于basic_string类模板,其第1个参数是CharType,第2个参数和第3个参数的默认值和CharType均相关。在声明string类时,参数char取代模板中的CharType,string即成为模板的实例,同时模板中的第3个参数成为“class Allocator=allocator<char>”,其意义为string中对象的内存类型为char型。
string类还提供了1个和配置器相关的函数get_allocator(),其函数原型为:(www.xing528.com)
函数返回string类的内存模型对象,可以用于构造新的字符串。下面以例2-15为例介绍该函数的使用方法。
例2-15
由于在string类中,allocator是保护成员,难以直接调用对内存的直接配置。本节仅以简单的知识简要介绍配置器的概念和使用方法。关于配置器的详细使用见后面相应的章节。
总结
对于配置器,一般情况下都是使用默认配置器。对于本节内容,读者了解即可。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。