C++ 是否可以保证std::vector使用allocate函数分配的每个内存也会通过一次释放调用立即释放?

C++ 是否可以保证std::vector使用allocate函数分配的每个内存也会通过一次释放调用立即释放?,c++,memory-management,vector,stl,allocator,C++,Memory Management,Vector,Stl,Allocator,我正在为std::vector编写自定义分配器,想知道std::vector如何使用指定的分配器?它可以为5个对象分配内存,然后部分取消分配内存,例如在前2个元素,然后3个元素。。。(我看不出有任何理由不这样做) 《标准》中有没有提到这方面的内容?我什么也找不到 是否保证std::vector使用分配函数分配的每个内存也会通过一次释放调用立即释放 对。std::allocator::deallocate的原型是 void deallocate( pointer p, size_type n );

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

《标准》中有没有提到这方面的内容?我什么也找不到

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

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

void deallocate( pointer p, size_type n );
它可以为5个对象分配内存,然后部分取消分配内存,例如在前2个元素,然后3个元素。。。(我看不出有任何理由不这样做)

但是
n
不能与先前传递给匹配的
allocate
函数的内容不同,如下所示:

解除分配指针p引用的存储,该指针必须是先前调用allocate()获得的指针。参数n必须等于最初生成p的allocate()调用的第一个参数

基本上,
deallocate
的参数是

  • allocate
  • 为获取它而传递的相应
    n
  • 是否保证
    std::vector
    使用分配函数分配的每个内存也会通过一次释放调用立即释放

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

    void deallocate( pointer p, size_type n );
    
    它可以为5个对象分配内存,然后部分取消分配内存,例如在前2个元素,然后3个元素。。。(我看不出有任何理由不这样做)

    但是
    n
    不能与先前传递给匹配的
    allocate
    函数的内容不同,如下所示:

    解除分配指针p引用的存储,该指针必须是先前调用allocate()获得的指针。参数n必须等于最初生成p的allocate()调用的第一个参数

    基本上,
    deallocate
    的参数是

  • allocate
  • 为获取它而传递的相应
    n

  • 这是所有定义的实现。通常,一旦
    vector.size()==vector.capacity()
    插入一些东西,它的容量就会翻倍。一个std::vector包含一个连续的内存块(不管怎样,你为什么关心呢?)我怎么写一个分配器呢?我不知道它是如何被调用的?比如说,分配了N个大小的内存,我把它放在不同的地方,如果它将N/2和N/2分开释放,我将从错误的位置释放。std::vector和std::分配器(或您的分配器)是松散耦合的。分配器不知道任何容器(用例)。这是所有定义的实现。通常,一旦
    vector.size()==vector.capacity()
    插入一些东西,它的容量就会翻倍。一个std::vector包含一个连续的内存块(不管怎样,你为什么关心呢?)我怎么写一个分配器呢?我不知道它是如何被调用的?比如说,分配了N个大小的内存,我把它放在不同的地方,如果它将N/2和N/2分开释放,我将从错误的位置释放。std::vector和std::分配器(或您的分配器)是松散耦合的。分配器不知道任何容器(用例)。