假設我正在使用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++中,處理重新分配的更好方法是使用標準庫容器,如矢量,並讓它自然地增長。「,這是這個問題的出發點... ... –