Opcjonalny argument w postaci wskaźnika na pamięć już zaalokowaną przez alokator A może zostać użyty, aby wskazać w jakim obszarze powinna być zrobiona nowa alokacja.
Alokator musi także posiadać zdefiniowaną metodę void A::deallocate(A::pointer p, A::size_type n), która jako parametry przyjmuje wskaźnik zwrócony przez wywołanie metody allocate oraz ilość elementów dla których pamięć ma być zdealokowana (bez niszczenia obiektów).
Tworzenie i usuwanie obiektu jest oddzielone od procesu alokacji i dealokacji pamięci. Alokator musi definiować metody A::construct oraz A::destroy (obie oznaczone jako przestarzałe w C++17, i usunięte w C++20), które będą odpowiedzialne za tworzenie i usuwanie obiektu. Ich implementacja może wyglądać następująco:
template <typename T> void A::construct(A::pointer p, A::const_reference t) { new ((void*) p) T(t); }
template <typename T> void A::destroy(A::pointer p) { ((T*)p)->~T(); }
Poza tym alokatorem powinien spełniać poniższe wymagania: powinna posiadać domyślny konstruktor oraz destruktor, które nie mogą wyrzucać wyjątków, powinna posiadać dwa konstruktory kopiujące, z których jeden jest szablonem.
Przypisy
Kategoria:C++