簡體   English   中英

std :: allocator的第二個參數的目的是什么 <T> ::取消分配?

[英]What is the purpose of the second parameter to std::allocator<T>::deallocate?

這里是deallocate mem的聲明。 分配器類。 我的問題是這個宣言中的第二個論點是什么? 如果這個函數調用operator delete(_Ptr),那么這個參數是不被使用的,那么它的用途是什么?
謝謝。

摘自MSDN:

從指定位置開始的存儲中釋放指定數量的對象。

void deallocate(
   pointer _Ptr, 
   size_type _Count
);  

參數

_Ptr指向要從存儲中釋放的第一個對象的指針。

_Count要從存儲中取消分配的對象數。

當你打電話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

這對許多不同類型的分配器很有用。 例如,您可能有一個分配器,它為不同大小的塊使用不同的池; 這樣的分配器需要知道被解除分配的塊的大小是什么,以便它知道返回內存需要哪個池。

它沒有被閑置。

來自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 );
}

(參考分配器文檔中的示例: http//msdn.microsoft.com/en-us/library/723te7k3.aspx

我假設分配器不執行新的[]並且不保留已分配元素的數量,因此它不能執行delete []?

所以用戶需要告訴分配的數量和解除分配的數量。

M.

在我看來,它期望_Ptr成為一個對象數組的指針,它基本上是這樣做的:

for (size_type i = 0; i<_Count; i++) {
    delete _Ptr;
    _Ptr++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM