C++ で STL マップのオブジェクトを作成しているとしますmap<string,char>mymap``$
。さて、このオブジェクトにメモリがどのように割り当てられているか知りたいですか? 私の混乱のポイントは、動的割り当てがなく、事前にコンテナーのサイズがわからないことです。では、どこから、どのようにメモリがオブジェクトmymapに割り当てられるのでしょうか?
2 に答える
3
動的な割り当てはありません
確かにありますが、それは内部にあります。std::map
通常はツリーとして保存されるため、新しいオブジェクトが挿入されるたびに新しいノードが割り当てられます。動的に。明示的に記述しないからとnew
いって、それが内部で発生しないという意味ではありません。
のデストラクタでstd::map
は、ノードは自動的に削除されます。ただし、ノードに動的に割り当てられたオブジェクトが含まれている場合、それらはマップによって削除されないことに注意してください。
于 2012-07-16T19:43:11.863 に答える
1
では、どこからどのようにメモリがオブジェクトmymapに割り当てられるのでしょうか。
すべての標準コンテナのデフォルトのアロケータはstd::allocator
、コンテナがメモリを取得して解放する場所から、メモリが完了するまでのです。カスタムアロケータを使用して、必要に応じてすべての割り当てと割り当て解除を追跡できます。
于 2012-07-16T19:43:02.763 に答える