Hinnant的short_alloc仅在堆栈上

时间:2019-01-08 05:52:11

标签: c++ c++11 memory-management

我正在尝试使用Hinnant的short_alloc在堆栈上分配向量, 我正在尝试完全删除堆分配。现在出现的问题是,开发人员在向量大小之外使用push_back。我正在考虑重写push_back函数,以便它检查是否达到了容量,如果是,则它将断言错误。可以理解,STL功能并不是要被覆盖的,什么是更好的实现方法。

2 个答案:

答案 0 :(得分:2)

首先,您不需要继承任何内容即可覆盖任何内容。允许分配器在allocate函数中引发异常。毕竟,它使用::operator new,如果它无法分配内存,它将抛出std::bad_alloc。在我的系统上,它也会:__throw_length_error("allocator<T>::allocate(size_t n) 'n' exceeds maximum supported size")。.

因此,在您的allocate函数中,请执行以下操作:

throw std::bad_alloc();

还是。。我不清楚为什么有人要在有数组的情况下分配给stack的{​​{1}}。但这不是我的事。

答案 1 :(得分:1)

我曾经是该分配器的专家,但是,它确实需要您正确处理竞技场。

由于带有分配器的向量是与常规向量不同的类型,因此它与现有的API配合不好。取而代之的是,我最近改用boost进行相同的操作,而开销却更少:

  • small_vector:类似于分配器
  • static_vector:仅堆栈部分

这两个容器都在类本身包含竞技场,并且对复制和移动具有不错的支持。