Ich versuche std::vector
als Programmierübung zu implementieren.
Betrachten Sie das folgende Code-Snippet:
%Vor% m_data
hat den Typ T*
.
Ich muss Speicher mit std::allocator_traits<allocator_type>::allocate(m_alloc, m_capacity)
zuweisen, die std::allocator_traits<allocator_type>::pointer
zurückgibt.
Kann ich annehmen, dass pointer
implizit in T*
umgewandelt werden kann und den von allocate
an m_data
? zurückgegebenen Wert zuweisen kann?
Wenn nicht, wie wird der Speicher in vector
richtig zugeordnet?
Sie sollten Ihr m_data
Mitglied zu Allocator::pointer
machen. (Sie sollten wahrscheinlich einen lokalen Alias dieses Typs in Ihrem Vektor erstellen, wenn Sie der Standardschnittstelle folgen möchten.)
Der Typ ist da, weil einige Zuweiser nicht in rohen Zeigern arbeiten, wie der Shared-Memory-Allokator Boost.Interprocess, der abhängig von der Konfiguration Smartpointer verwenden kann.