神秘的 Allocator

本文深入探讨了C++标准库中std::vector的allocator模板参数的作用与使用方法,包括如何利用placement new手动调用构造函数及释放内存的过程。
部署运行你感兴趣的模型镜像
先看看 std::vector 的声明
template < class Type,  class Allocator = allocator<Type> >
class vector

 这个 allocator 一般我们很少用到,这个 allocatior 完成了分配内存的工作,对于小内存,它使用了线程池来优化效率。比较具体的介绍可以参考 http://www.stlchina.org/twiki/bin/view.pl/Main/STLWhatAllocator 。

需要注意的是,如果你的 Type 是一个类,那么这个 allocatior 实际上只分配了足够的内存,而并没有调用这个类的构造函数,如果你的类需要调用构造函数,可以使用 new 的比较少见的一种用法(placement new):

std::allocator<Type> _alloc; 
Type *p=_alloc.allocator(1); // 分配一个空间 1 是要构造的 Type 的数量
p=new (p) Type( ); // 在这个空间上调用构造函数,注意第一个 () 不能少

在指定的空间创建你的类(调用构造函数)。最后释放空间

_alloc.deallocator( p, 1 ); // 释放空间

如果想搞明白 new 的这些奇怪的用法,可以参考 http://www.javajsp.net/JavaLibrary/C/200701/JavaLibrary_6963.html

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值