ベクターを実装しようとしていますが、最良の実装ではアロケーター クラス (メモリ ヘッダー ファイル) を使用することを読みました。私はそれが何であるかわからず、サイト cplusplus.com はまったく役に立ちませんでした。
2 に答える
これは、メモリ管理の抽象化です。
C プログラミングでは、基本的に関数malloc()を使用しfree()て、チャンクがどのように割り当てられているかを知る必要なく、メモリのチャンクを割り当てます。C++ では、関数はoperator new()とoperator delete()です。
std::allocator割り当てられるオブジェクトの型である 1 つの型パラメーターを取るテンプレートです。std::allocator使用operator new()とoperator delete()内部のインスタンス化ですが、それstd::allocator<T>が何でTあるかについての情報を持っているという事実は、オブジェクトを構築および破棄する方法を知っていることを意味しTます。
の 4 つの基本機能は次のstd::allocator<T>とおりです。
allocate(size_type n)バイト
operator new()にスペースを割り当てるために使用します。割り当てられたオブジェクトは構築されn * sizeof (T)ないことに注意してください。1 つのオブジェクトにスペースを割り当て、引数なしのコンストラクターを呼び出すnTとは異なり、オブジェクトにのみスペースを割り当てます。それぞれを明示的に構築するために使用する必要があります。new T()Tallocate(size_type n)nTconstruct()deallocate(pointer p, size_type n)operator delete()への以前の呼び出しによって返されたメモリを解放するために使用しallocate()ます。deallocate()スペースのみを解放することに注意してください。destroy()各オブジェクトを明示的に呼び出す必要がありnTます。そうしないと、メモリ リークが発生する可能性があります。construct(pointer p, const T& val)にあるオブジェクトの
Tコピー コンストラクターを呼び出します。Tpdestroy(pointer p)にあるオブジェクトの
Tデストラクタを呼び出します。Tp
標準ライブラリのコンテナクラスのメモリ管理を行うクラスです。
ただし、独自のメモリ管理を提供したい場合std::allocatorは、デフォルトのメモリ管理を提供します。