在模板类中使用std :: allocator时出错

时间:2019-05-26 12:18:42

标签: c++ allocator

试图弄清楚如何使用std ::分配器。

#include <iostream>

template <typename T, typename A>
struct vector_base
{
  A       allocator;
  T*      data;
  size_t  size;
  size_t  space;

  vector_base(const A &alloc, size_t n)
    :allocator(alloc), data(alloc.allocate(n)), size(n), space(n)
  {}

  ~vector_base() {allocator.deallocate(data, space);}
};

int main() {
  std::allocator<int> my_allocator;
  vector_base<int, std::allocator<int>> vector(my_allocator, 10);

  return 0;
}

错误:

  

错误:将“ const std :: allocator”作为“ this”自变量丢弃   限定词[-fpermissive]        :allocator(alloc),data(alloc.allocate(n)),size(n),space(n)

1 个答案:

答案 0 :(得分:4)

allocconst&,您正在尝试在其上调用allocate,这是一个非const方法,这是不允许的。

请致电您初始化成员的allocate

  vector_base(const A &alloc, size_t n)
    :allocator(alloc), data(allocator.allocate(n)), size(n), space(n)
  {}