私はベクトルを実装しようとしていますが、最良の実装ではアロケータクラス(メモリヘッダファイル)を使用していると読んでいます。私はそれが何であるか分かりませんし、サイトcplusplus.comは私を助けませんでした。アロケータとは<T>
答えて
これは、メモリ管理の抽象です。
Cプログラミングでは、チャンクがどのように割り当てられているかを知ることなく、メモリのチャンクを割り当てるために、基本的には関数malloc()
とfree()
を使用します。 C++では、関数はoperator new()
とoperator delete()
です。
std::allocator
は、割り当てられるオブジェクトのタイプである1つの型パラメータを取るテンプレートです。 std::allocator
のインスタンシエーションはoperator new()
とoperator delete()
を内部的に使用しますが、にはT
の情報があるということは、T
オブジェクトの作成方法と破棄方法を知っているということです。 std::allocator<T>
の
四つの基本的な機能は以下のとおりです。
allocate(size_type n)
は
n * sizeof (T)
バイトのためのスペースを割り当てることoperator new()
を使用します。割り当てられているオブジェクトはどれもn
T
であることに注意してください。T
オブジェクトとの両方にスペースを割り当てないnew T()
とは異なり、allocate(size_type n)
はn
T
オブジェクトのためのスペースしか割り当てません。それぞれを明示的に構築するには、construct()
を使用する必要があります。deallocate(pointer p, size_type n)
allocate()
への前の呼び出しによって返されたメモリを解放するためにoperator delete()
を使用します。deallocate()
はスペースを解放するだけであることに注意してください。n
T
オブジェクトのそれぞれに明示的にdestroy()
を呼び出す必要があります。そうしないと、メモリがリークする可能性があります。construct(pointer p, const T& val)
p
に位置T
オブジェクトのT
コピーコンストラクタを呼び出します。destroy(pointer p)
p
に位置T
オブジェクト上T
デストラクタを呼び出します。
ありがとうございます! –
+1、 'std :: allocator'でいくつかの記事とその答えを読んでいましたが、これは初めて理解しました。ありがとうございました :) –
標準ライブラリコンテナクラスのメモリ管理を行うクラスです。
しかし、独自のメモリ管理を提供したい場合は、std::allocator
がデフォルトのメモリ管理を提供します。
それは 'デフォルト' のメモリ管理を行います。 – Nick
はい、それはどのようにベクトルの実装で使用されますか? –
@RondogiannisAristophanes:実装に依存し、コンテナのユーザーとしては、わかっている必要はありません。 –
- 1. 自動ポインタとアロケータ
- 2. Kerberos TGTの動作
- 3. アロケータとは何ですか?アロケータはいつ使用されますか?
- 4. shared_ptrカスタム・アロケータとカスタム・ディテクタ
- 5. のLinuxスラブ・アロケータとキャッシュパフォーマンス
- 6. ゲームエンジンのアロケータ
- 7. VMR9アロケータ/プレゼンターサンプル2D?
- 8. カスタムクラス(ベクトル<string>のシンプルバージョン、アロケータを使用したRange-forループ)
- 9. スタック対キャッシュフレンドリーなアロケータ
- 10. アロケータ内のオブジェクトごとのデータ?
- 11. STLコンテナ:コンストラクタのアロケータパラメータとスコープ付きアロケータ
- 12. ケルベロスチケットのパスTGTとサービスチケットは、Windows XPとunixにありますか?
- 13. C++でのアロケータの使用
- 14. 簡単なアロケータ対応コンテナ?
- 15. 不正なアロケータの実装
- 16. GSSManager.createCredentialはKerberosキーとTGTをどのように取得しますか?
- 17. 複数定義された標準アロケータ
- 18. ブーストプロセス間アロケータ - ファイルサイズを管理する
- 19. C++ MSVCのカスタムSTLアロケータのバグ?
- 20. C++ STLアロケータ関数をオーバーライドしてスレッドセーフとしてラベリングする
- 21. MIT KerberosがMSLSAキャッシュでTGTの検索に失敗する
- 22. LSAキャッシュからTGTチケットを取得できません
- 23. Windows上のKerberos TGTセッションキーがすべて0になる原因
- 24. Oracle - "Sql開発者"データベースコピーユーティリティ - Src/tgt異なるスキーマ
- 25. 新規とアロケータによるメモリ割り当ての違いは何ですか
- 26. 一部のアロケータは怠け者ですか?
- 27. C++アロケータのstd :: align_val_tの有効なアライメント値は何ですか?
- 28. なぜstd :: listにはT型のアロケータがありますか?
- 29. なぜ多くのアロケータ関数はオプションですか?
- 30. エラー: 'クラスのstd ::ベクトル<ルート、のstd ::アロケータ<route>>' という名前のメンバーを持っていない 'exitPoint'
[ 'のstd :: allocator'](http://en.cppreference.com/w/cpp/memory/allocator) – Praetorian