Я бы порекомендовал использовать умный указатель, например std::unique_ptr
(это функция C ++ 0x, пока не все компиляторы ее поддерживают).Например:
std::map<unsigned long, std::unique_ptr<Object>> map;
// Do something with the map
map.clear(); // The objects are automatically deleted.
Вы также можете использовать std::shared_ptr
(или boost::shared_ptr
, если ваш компилятор не поддерживает интеллектуальные указатели C ++ 0x), что дает преимущество в том, что он будет работать, если ваша картаможет содержать один и тот же указатель более одного раза, и ваши объекты не будут уничтожены, если у кого-то еще есть указатель на них.
boost::ptr_map
также варианты, хотя я считаю, что, как и при ручном подходе, не будет работать правильно, если карта содержит один и тот же указатель более одного раза.