是否保证std :: vector每个分配带分配函数的内存,也会一次解除分配,单个deallocate调用?

时间:2016-09-23 09:36:59

标签: c++ memory-management vector stl allocator

我正在为std :: vector编写自定义分配器,并且想知道std :: vector如何使用指定的分配器?可以为5个对象分配内存,然后部分释放内存,例如在前2个元素,然后是3个元素......(我没有看到任何理由不这样做)。

标准中有没有提到它?我找不到任何东西。

1 个答案:

答案 0 :(得分:4)

  

是否保证std::vector每个已分配内存的分配函数,还会一次解除分配,单个解除分配调用?

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

void deallocate( pointer p, size_type n );
  

它可以为5个对象分配内存,然后部分释放内存,例如在前2个元素,然后是3个元素......(我没有看到任何理由不这样做)。

n与之前传递给匹配的allocate函数的内容不同,explained in the spec.

  

释放指针p引用的存储,该存储必须是先前调用allocate()获得的指针。参数n必须等于最初生成p。

的allocate()调用的第一个参数

基本上,deallocate的参数是

  1. allocate
  2. 返回的内容
  3. 为获取它而通过的相应n