正确分配向量中的内存

Correctly allocate memory in vector

我正在尝试将 std::vector 实施为编程练习。

考虑以下代码片段:

template <class T, class Allocator = std::allocator<T>>
class vector
{
public:
    using size_type = size_t;
    using allocator_type = Allocator;
    ...
private:
    T* m_data;
    allocator_type m_alloc;
    size_type m_capacity;
    ...
}; 

m_data 的类型为 T*。 我需要使用 std::allocator_traits<allocator_type>::allocate(m_alloc, m_capacity) which returns std::allocator_traits<allocator_type>::pointer.

分配内存

我可以假设 pointer 可以隐式转换为 T* 并将从 allocate 返回的值分配给 m_data 吗?

如果不是,如何在vector中正确分配内存?

您应该让您的 m_data 成员成为 Allocator::pointer。 (如果你想遵循标准接口,你可能应该在你的向量中创建该类型的本地别名。)

存在类型是因为某些分配器不处理原始指针,例如 Boost.Interprocess 共享内存分配器,它可能根据配置使用智能指针。