【问题标题】:Correctly allocate memory in vector在向量中正确分配内存
【发布时间】:2015-12-20 22:53:50
【问题描述】:

我正在尝试将std::vector 实现为编程练习。

考虑以下代码sn-p:

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&lt;allocator_type&gt;::pointerstd::allocator_traits&lt;allocator_type&gt;::allocate(m_alloc, m_capacity) 分配内存。

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

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

【问题讨论】:

标签: c++ c++11 stl c++14 allocator


【解决方案1】:

您应该将您的m_data 成员设为Allocator::pointer。 (如果您想遵循标准接口,您可能应该在向量中创建该类型的本地别名。)

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

【讨论】:

  • 如果我将m_data定义为Allocator::pointerstd::vector::data()函数应该返回什么?它的返回类型是T*
  • @Hrant 你应该返回std::addressof(*m_data)
猜你喜欢
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
相关资源
最近更新 更多