在向量中正确分配内存

Hra*_*ant 8 c++ stl allocator c++11 c++14

我正在尝试实现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;
    ...
}; 
Run Code Online (Sandbox Code Playgroud)

m_data有类型T*.我需要分配使用std::allocator_traits<allocator_type>::allocate(m_alloc, m_capacity)哪个返回的内存std::allocator_traits<allocator_type>::pointer.

我可以假设,pointer可隐式转换T*并分配从返回的值allocatem_data

如果没有,如何正确分配内存vector

Seb*_*edl 7

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

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