正确分配向量中的内存
Correctly allocate memory in vector
我正在尝试将 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)
which returns std::allocator_traits<allocator_type>::pointer
.
分配内存
我可以假设 pointer
可以隐式转换为 T*
并将从 allocate
返回的值分配给 m_data
吗?
如果不是,如何在vector
中正确分配内存?
您应该让您的 m_data
成员成为 Allocator::pointer
。 (如果你想遵循标准接口,你可能应该在你的向量中创建该类型的本地别名。)
存在类型是因为某些分配器不处理原始指针,例如 Boost.Interprocess 共享内存分配器,它可能根据配置使用智能指针。
我正在尝试将 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)
which returns std::allocator_traits<allocator_type>::pointer
.
我可以假设 pointer
可以隐式转换为 T*
并将从 allocate
返回的值分配给 m_data
吗?
如果不是,如何在vector
中正确分配内存?
您应该让您的 m_data
成员成为 Allocator::pointer
。 (如果你想遵循标准接口,你可能应该在你的向量中创建该类型的本地别名。)
存在类型是因为某些分配器不处理原始指针,例如 Boost.Interprocess 共享内存分配器,它可能根据配置使用智能指针。