2012-04-18 76 views
3

我想實現一個向量,並且我已經讀過最好的實現使用分配器類(內存頭文件)。我不知道它是什麼,網站cplusplus.com根本沒有幫助我。什麼是分配器<T>

+3

['std :: allocator'](http://en.cppreference.com/w/cpp/memory/allocator) – Praetorian 2012-04-18 14:33:04

回答

6

這是一個內存管理的抽象概念。

在C編程中,您基本上使用函數malloc()free()來分配內存塊,而無需知道如何分配塊。在C++中,函數是operator new()operator delete()

std::allocator是一個模板,取一個類型參數,它是要分配的對象的類型。 std::allocator的實例化在內部使用operator new()operator delete(),但std::allocator<T>具有關於什麼是T的信息意味着它知道如何構造和銷燬對象。

std::allocator<T>四個基本功能是:

  1. allocate(size_type n)

    用途operator new()n * sizeof (T)字節分配空間。請注意,分配的對象都不構成任何對象;不同於new T(),這兩個對象分配一個空間T對象調用無參數構造函數,allocate(size_type n)只分配空間給nT對象。您需要使用construct()來顯式構造每一個。

  2. deallocate(pointer p, size_type n)

    用途operator delete()以釋放先前調用allocate()返回的內存。請注意,deallocate()只能釋放空間。您必須在每個nT對象上明確地調用destroy(),否則您可能會泄漏內存。

  3. construct(pointer p, const T& val)

    呼籲位於pT對象T拷貝構造函數。

  4. destroy(pointer p)

    調用位於pT對象的析構函數T

+0

非常感謝! – 2012-04-18 15:17:34

+0

+1,閱讀了一些關於'std :: allocator'的文章和SO答案,但這是我第一次理解它。謝謝 :) – 2016-01-08 16:20:04

0

它是執行標準庫容器類的內存管理的類。
但是,如果您想提供自己的內存管理,您可以這樣做,std::allocator提供了默認的內存管理。

+1

它執行'默認'內存管理。 – Nick 2012-04-18 14:34:23

+0

是的,但它如何用於矢量實現? – 2012-04-18 14:37:59

+0

@RondogiannisAristophanes:依賴於實現,作爲容器的用戶,不需要知道。 – 2012-04-18 14:39:22