これにより、マップに含まれるポインターが削除されますか [...]?
いいえ、提供したコードを考えると、マップのすべてのメンバーがリークします。
原則として、すべてnewに一致するdelete. マップには がありますがdelete、その中の要素にはありません。
この問題に対する最も正しい解決策は、動的割り当てをまったく使用しないことです。MyType可能であれば、sディレクトリを保存するだけです:
map<string, MyType>
...そして、それ自体を動的に割り当てる代わりにmap、自動的に保存します:
map<string,MyType> my_map;
何らかの理由で自動ストレージ期間が不可能な場合は、動的割り当てにスマート ポインターを使用します。C++11 コンパイラの場合、 の要素にunique_ptr(または、まれに、shared_ptrまたは さえも) を使用します。weak_ptrmap
map<string, unique_ptr<MyType>> my_map;
(C++03 コンパイラの場合は、それに相当する Boost を使用します。) 次に、my_mapが破棄されると、すべての要素がdeleted になります。
これをすべてむき出しにして、上記のいずれもうまくいかない状況にある場合 (私は非常に疑わしいと思います)、自分でマップを反復する必要があります。
struct deleter
{
template <typename T> operator() (const T& rhs) const
{
delete rhs.second;
}
};
for_each (my_map->begin(), my_map->end(), deleter());
C++11 では、これを次のようなラムダにすることができます。
for_each (my_map->begin(), my_map->end(), [](auto item) -> void
{
delete item.second;
});