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)