我正在尝试使用Hinnant的short_alloc在堆栈上分配向量, 我正在尝试完全删除堆分配。现在出现的问题是,开发人员在向量大小之外使用push_back。我正在考虑重写push_back函数,以便它检查是否达到了容量,如果是,则它将断言错误。可以理解,STL功能并不是要被覆盖的,什么是更好的实现方法。
答案 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进行相同的操作,而开销却更少:
这两个容器都在类本身包含竞技场,并且对复制和移动具有不错的支持。