2017-04-10 62 views
1

特別是,爲什麼我們的爲什麼將分配器作爲模板參數傳遞給容器?

template<typename T, typename A = allocator<T>> 
class vector 
{ 
    A alloc; 
    //... 
}; 

,而不是

template<typename T> 
class vector 
{ 
    allocator<T> alloc; 
    //... 
}; 

我在C++手動看到這一點,它混淆了我不少。還有什麼其他類型的分配器可能需要/需要?

+4

以及你將如何指定分配器? –

+3

人們可能想要一個使用靜態內存塊而不是堆的分配器。矢量消失後,可以立即釋放整個塊而不是單個塊,從而減少了簿記量並提高了效率。第一個版本允許編寫這樣的自定義分配器,而第二個版本不允許。 – nwp

+0

如果只有一個分配器(免費商店),那麼完全不需要「分配器」。該系統將直接進入免費商店。所以你的問題應該是「爲什麼我們有分配器?爲什麼不用硬編碼'new'和'delete'? –

回答

2

因爲這隻適用於一個分配器 - 標準分配器。但是如果你想分配不同的內存呢?例如,您可能想要使用共享內存或文件備份內存或其他任何內容。

這是有分配器 - 允許用戶定製內存將被分配和釋放的方式。

+0

這是有道理的我從來沒有考慮過任何其他方式來分配內存,而不是抓住一個當你需要的時候,你可以從免費商店中獲得大量的信息,謝謝! –

+0

@AldenBernitt,共享內存是首先想到的東西。 ocators(它並不真正從動態內存中分配),或者,例如,線程優化的分配器。 – SergeyA

+1

另一個有用的分配器是一個調試/儀表分配器。 –

相關問題