C++ 在向量中正确分配内存

C++ 在向量中正确分配内存,c++,c++11,stl,c++14,allocator,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_al

我正试图实现
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;
    ...
}; 
模板
类向量
{
公众:
使用大小\类型=大小\ t;
使用分配器类型=分配器;
...
私人:
T*m_数据;
分配器类型m_alloc;
尺寸/类型/容量;
...
}; 
m_数据
具有类型
T*
。 我需要使用
std::allocator\u traits::allocate(m\u alloc,m\u capacity)
分配内存,它返回
std::allocator\u traits::pointer

我是否可以假定
指针可以隐式转换为
T*
,并将
allocate
返回的值分配给
m_data


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

您应该将
m_数据
成员设置为
分配器::指针
。(如果要遵循标准接口,可能应该在向量中创建该类型的本地别名。)


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

您可以创建自己的分配器。相关:如果我将
m_data
定义为
allocator::pointer
,那么
std::vector::data()
函数返回?它的返回类型是
T*
@Hrant您应该返回
std::addressof(*m_data)