C++ 中的allocator类

本文深入解析C++标准库中的allocator类,阐述其与C语言malloc及C++ new的区别,通过实例展示allocator的基本操作,包括内存分配、对象构造与销毁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    allocator类是C++标准库中管理内存的模板类,功能上与C语言中的malloc函数有点类似,但是与C++中的new函数由很大的区别。在分配内存时,allocator只负责分配内存,而new函数则是在分配内存之后在调用构造函数构造一个新的对象。就是说allocator函数吧内存分配和对象创建分开了。 在C++11标准中,allocator在namespace std内(namespace std{class allocator}),因此在使用时要加上命名空间访问,有以下几个常用的成员函数

address     //查找指定了其值的对象的地址 
allocate    //分配大小足以存储至少某个指定数量的元素的内存块 
construct   //在使用指定值初始化的指定地址处构造特定类型的对象 
destroy     //从指定位置开始从存储中释放指定数量的的对象 
deallocate  //调用对象析构函数而不释放存储对象的内存。 
max_size    //返回在可用内存用完之前,可以由类allocator  的对象分配的类型 Type 的元素数。 
rebind      //实现分配器以便使一种类型的对象可以为另一种类型的对象分配存储的结构 

    下面是一个allocator的一个简单的实例:

#include <iostream>
#include <string>

using namespace std;
int main()
{
	std::allocator<string> strAlloc;//创建一个string类型的allocator对象
	auto p = strAlloc.allocate(3);//分配三个对象的内存
	strAlloc.construct(p,"hello ");//构建第一个对象
	strAlloc.construct(p+1,"colorful ");//构建第二个对象
	strAlloc.construct(p+2,"world!");//构建第三个对象
	cout << *p << *(p+1) << *(p+2) << endl;//输出三个对象的内容
	strAlloc.destroy(p+2);//销毁对象
	strAlloc.destroy(p+1);
	strAlloc.destroy(p);
	strAlloc.deallocate(p,3);//释放内存
}

输出结果为:

hello colorful world!

以上就是对allocator的简单使用,其他类型的使用也是类似的步骤

转载于:https://my.oschina.net/u/3193939/blog/2245559

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值