ベクターを実装しようとしていますが、最良の実装ではアロケーター クラス (メモリ ヘッダー ファイル) を使用することを読みました。私はそれが何であるかわからず、サイト 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 つのオブジェクトにスペースを割り当て、引数なしのコンストラクターを呼び出すn
T
とは異なり、オブジェクトにのみスペースを割り当てます。それぞれを明示的に構築するために使用する必要があります。new T()
T
allocate(size_type n)
n
T
construct()
deallocate(pointer p, size_type n)
operator delete()
への以前の呼び出しによって返されたメモリを解放するために使用しallocate()
ます。deallocate()
スペースのみを解放することに注意してください。destroy()
各オブジェクトを明示的に呼び出す必要がありn
T
ます。そうしないと、メモリ リークが発生する可能性があります。construct(pointer p, const T& val)
にあるオブジェクトの
T
コピー コンストラクターを呼び出します。T
p
destroy(pointer p)
にあるオブジェクトの
T
デストラクタを呼び出します。T
p
標準ライブラリのコンテナクラスのメモリ管理を行うクラスです。
ただし、独自のメモリ管理を提供したい場合std::allocator
は、デフォルトのメモリ管理を提供します。