4

ベクターを実装しようとしていますが、最良の実装ではアロケーター クラス (メモリ ヘッダー ファイル) を使用することを読みました。私はそれが何であるかわからず、サイト cplusplus.com はまったく役に立ちませんでした。

4

2 に答える 2

7

これは、メモリ管理の抽象化です。

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>とおりです。

  1. allocate(size_type n)

    バイトoperator new()にスペースを割り当てるために使用します。割り当てられたオブジェクトは構築されn * sizeof (T)ないことに注意してください。1 つのオブジェクトにスペースを割り当て、引数なしのコンストラクター呼び出すn Tとは異なり、オブジェクトにのみスペースを割り当てます。それぞれを明示的に構築するために使用する必要があります。new T()Tallocate(size_type n)n Tconstruct()

  2. deallocate(pointer p, size_type n)

    operator delete()への以前の呼び出しによって返されたメモリを解放するために使用しallocate()ます。deallocate()スペースのみを解放することに注意してください。destroy()各オブジェクトを明示的に呼び出す必要がありn Tます。そうしないと、メモリ リークが発生する可能性があります。

  3. construct(pointer p, const T& val)

    にあるオブジェクトのTコピー コンストラクターを呼び出します。Tp

  4. destroy(pointer p)

    にあるオブジェクトのTデストラクタを呼び出します。Tp

于 2012-04-18T14:44:26.293 に答える
0

標準ライブラリのコンテナクラスのメモリ管理を行うクラスです。
ただし、独自のメモリ管理を提供したい場合std::allocatorは、デフォルトのメモリ管理を提供します。

于 2012-04-18T14:33:53.100 に答える