是否保证std::vector每次使用allocate函数分配的内存,也会通过单个deallocate调用立即释放?

Is it guaranteed that std::vector each allocated memory with allocate function, will also deallocate at once, with single deallocate call?

本文关键字:单个 调用 释放 内存 deallocate vector std 分配 函数 allocate 是否      更新时间:2023-10-16

我正在为std::vector编写自定义分配器,并想知道std::vector如何使用指定的分配器?它是否可以为5个对象分配内存,然后部分地释放内存,例如首先是2个元素,然后是3个元素……(我看不出有什么理由不这样做。)

标准中有没有提到这一点?我找不到任何东西

是否保证std::vector每个分配的内存与allocate函数,也将在一次释放,与单一的deallocate调用?

是的。std::allocator::deallocate的原型为

void deallocate( pointer p, size_type n );

可以为5个对象分配内存,然后部分释放内存,例如先2个元素,然后3个元素…(我看不出有什么理由不这样做。)

但是n不能与之前传递给匹配的allocate函数的不同,如规范中所解释的:

释放指针p所引用的存储空间,该指针必须是先前调用allocate()方法获得的指针。参数n必须等于最初产生p的allocate()调用的第一个参数。

基本上,deallocate的参数是
  1. allocate返回的内容
  2. 为获取它而传递的相应n
相关文章: