std :: allocator <T> :: deallocate的第二个参数的目的是什么?

The*_* do 4 c++ pointers memory-management

这里是deallocate mem的声明.分配器类.我的问题是这个宣言中的第二个论点是什么?如果这个函数调用operator delete(_Ptr),那么这个参数是不被使用的,那么它的用途是什么?
谢谢.

摘自MSDN:

从指定位置开始的存储中释放指定数量的对象.

void deallocate(
   pointer _Ptr, 
   size_type _Count
);  
Run Code Online (Sandbox Code Playgroud)

参数

_Ptr指向要从存储中释放的第一个对象的指针.

_Count要从存储中取消分配的对象数.

Jam*_*lis 7

当您调用时deallocate,必须为它指定一个先前从调用中获取的指针allocate以及allocate最初分配内存时传递给的大小.

例如,

#include <memory>

std::allocator<int> a;
int* p = a.allocate(42);
a.deallocate(p, 42);     // the size must match the size passed to allocate
Run Code Online (Sandbox Code Playgroud)

这对许多不同类型的分配器很有用.例如,您可能有一个分配器,它为不同大小的块使用不同的池; 这样的分配器需要知道被解除分配的块的大小是什么,以便它知道返回内存需要哪个池.


Len*_*rri 5

它没有被闲置.

来自MSDN:

从指定位置开始的存储中释放指定数量的对象(在本例中为_Ptr).

参数

_Ptr 指向要从存储中释放的第一个对象的指针.(开始位置)

_Count 要从存储中取消分配的对象数.

示例代码:

// allocator_allocate.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>
#include <vector>

using namespace std;

int main( ) 
{
   allocator<int> v1Alloc;

   allocator<int>::pointer v1aPtr;

   v1aPtr = v1Alloc.allocate ( 10 );

   int i;
   for ( i = 0 ; i < 10 ; i++ )
   {
      v1aPtr[ i ] = i;
   }

   for ( i = 0 ; i < 10 ; i++ )
   {
      cout << v1aPtr[ i ] << " ";
   }
   cout << endl;

   v1Alloc.deallocate( v1aPtr, 10 );
}
Run Code Online (Sandbox Code Playgroud)