在向量中正确分配内存

8

我正在尝试作为一项编程练习实现 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)来分配内存,它返回std::allocator_traits<allocator_type>::pointer

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

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


你可以自己制作分配器。 - bku_drytt
相关链接:https://dev59.com/_ofca4cB1Zd3GeqPot-7/ - dyp
1个回答

7
你应该将你的m_data成员设置为Allocator::pointer。(如果你想遵循标准接口,你可能需要在你的向量中创建这种类型的本地别名。)这个类型的存在是因为一些分配器不处理原始指针,比如Boost.Interprocess共享内存分配器,根据配置可能使用智能指针。

如果我将m_data定义为Allocator::pointer,那么std::vector::data()函数应该返回什么?它的返回类型是T* - Hrant
@Hrant 你应该返回 std::addressof(*m_data) - Sebastian Redl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接