我正在尝试将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
中正确分配内存?
答案 0 :(得分:7)
您应该让m_data
成员成为Allocator::pointer
。 (如果您想要遵循标准接口,您应该在向量中创建该类型的本地别名。)
类型是因为某些分配器不处理原始指针,如Boost.Interprocess共享内存分配器,它可能根据配置使用智能指针。