Visual Studio forc++の使用; std :: listはnewを使用してノードを割り当てますか?私はメモリヒープを課題としてコーディングしているので、それが新しいものを使用すると、メモリヒープの有効性が低下するので質問します。
この質問によるメモリヒープ、最初の回答:メモリヒープを実装する方法
newを使用する場合、どのように修正すればよいですか(上記の質問への回答で概説されているメモリヒープのリンクリストの使用に関連して)?
ありがとう。
Visual Studio forc++の使用; std :: listはnewを使用してノードを割り当てますか?私はメモリヒープを課題としてコーディングしているので、それが新しいものを使用すると、メモリヒープの有効性が低下するので質問します。
この質問によるメモリヒープ、最初の回答:メモリヒープを実装する方法
newを使用する場合、どのように修正すればよいですか(上記の質問への回答で概説されているメモリヒープのリンクリストの使用に関連して)?
ありがとう。
C ++標準のSTLコンテナ(設計がSTLに基づいているため、いわゆる)には、アロケータを指定するテンプレートパラメータがあります。そのアロケータが使用されます。デフォルトではライブラリが提供するアロケータになりますが、カスタムヒープを使用する独自のアロケータを渡すことができます。
すべての標準テンプレートライブラリコンテナは、抽象化(アロケータと呼ばれる)を使用してメモリを割り当てます。デフォルトはですstd::allocator<T>
。このデフォルトのアロケータはnewを使用しますが、そうでないアロケータを使用(書き込み)することを妨げるものではありません。
このドキュメントから、2番目のテンプレートパラメータが使用するアロケータであることがわかります。
はい、パラメータnew
を介して間接的に使用しAllocator
ます。ヒープを使用するカスタムアロケータを作成し、それを使用してlist
sをインスタンス化できます。
はい、std::listはデフォルトでstd::allocatorを使用します。これは。を使用しますnew
。
ただし、必要な割り当てスキームを使用する独自のアロケータクラスを作成し、それを2番目のテンプレート引数としてstd::listに渡すことができます。