std::allocator
を使用してnew
とdelete
をラップするカスタムベクトルを作成しています。reallocの代わりにstd :: allocatorを使用するにはどうすればよいですか?
要素の数がベクターの容量を超えると、私はバッファをもっと大きなものに再割り当てしたいと思います。私は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 c-アロケータの機能性?rq = 1)。 – ArchbishopOfBanterbury
[FYI] https://isocpp.org/wiki/faq/freestore-mgmt#realloc-and-renew – NathanOliver
@NathanOliverこれは、「C++では、再配置を処理するためのより良い方法は、標準ライブラリコンテナを使用することですベクトルのように、自然に成長させてください "というのは、この質問の出発点です... –