假设我正在使用std::allocator
编写自定义矢量来包装new
和delete
。如何使用std :: allocator代替realloc?
当元素的数量超过向量的容量时,我想重新分配缓冲区到更大的值。我可以通过拨打realloc()
轻松实现。我不想这样做,因为我认为分配/释放的责任应该驻留在分配器中。
然而,看std::allocator
的界面,我不明白我怎么可以做一个重新分配。只有对的方法:
T* allocate(std::size_t n);
void deallocate(T* p, std::size_t n);
我应该打电话allocator::allocate
然后allocator::deallocate
而不只是realloc
?这是否有效?它一定是std::vector
正在做的。为什么std::allocator
不提供reallocate
功能?
_“为什么std :: allocator不提供重新分配函数?”_这在某种程度上在[这个问题]中被覆盖了(http://stackoverflow.com/questions/3105001/why-is-there-no-reallocation -Functionality-在-C-分配器?RQ = 1)。 – ArchbishopOfBanterbury
[FYI] https://isocpp.org/wiki/faq/freestore-mgmt#realloc-and-renew – NathanOliver
@NathanOliver它结束时指出“在C++中,处理重新分配的更好方法是使用标准库容器,如矢量,并让它自然地增长。“,这是这个问题的出发点... ... –