在向量中正确分配内存

时间:2015-09-23 14:43:28

标签: c++ c++11 stl c++14 allocator

我正在尝试将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)的{​​{1}}来分配内存。

我可以假设std::allocator_traits<allocator_type>::pointer可以隐式转换为pointer并将T*返回的值分配给allocate吗?

如果没有,如何在m_data中正确分配内存?

1 个答案:

答案 0 :(得分:7)

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

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