1

Visual Studio forc++の使用; std :: listはnewを使用してノードを割り当てますか?私はメモリヒープを課題としてコーディングしているので、それが新しいものを使用すると、メモリヒープの有効性が低下するので質問します。

この質問によるメモリヒープ、最初の回答:メモリヒープを実装する方法

newを使用する場合、どのように修正すればよいですか(上記の質問への回答で概説されているメモリヒープのリンクリストの使用に関連して)?

ありがとう。

4

4 に答える 4

5

C ++標準のSTLコンテナ(設計がSTLに基づいているため、いわゆる)には、アロケータを指定するテンプレートパラメータがあります。そのアロケータが使用されます。デフォルトではライブラリが提供するアロケータになりますが、カスタムヒープを使用する独自のアロケータを渡すことができます。

于 2012-10-24T19:46:56.680 に答える
4

すべての標準テンプレートライブラリコンテナは、抽象化(アロケータと呼ばれる)を使用してメモリを割り当てます。デフォルトはですstd::allocator<T>。このデフォルトのアロケータはnewを使用しますが、そうでないアロケータを使用(書き込み)することを妨げるものではありません。

このドキュメントから、2番目のテンプレートパラメータが使用するアロケータであることがわかります。

于 2012-10-24T19:46:42.963 に答える
2

はい、パラメータnewを介して間接的に使用しAllocatorます。ヒープを使用するカスタムアロケータを作成し、それを使用してlistsをインスタンス化できます。

于 2012-10-24T19:46:32.697 に答える
1

はい、std::listはデフォルトでstd::allocatorを使用します。これは。を使用しますnew

ただし、必要な割り当てスキームを使用する独自のアロケータクラスを作成し、それを2番目のテンプレート引数としてstd::listに渡すことができます。

于 2012-10-24T19:48:01.230 に答える