Этот код работает (компилируется и запускается) для меня:
#include <map>
class MyObject
{ };
int main(void)
{
typedef std::map<int, MyObject*> MyMap;
MyMap *myMap = new MyMap;
MyObject *obj = new MyObject;
myMap->insert(MyMap::value_type(0, obj));
delete obj;
delete myMap;
}
Таким образом, проблема заключается в деталях (// ...
или что может сделать MyObject
) или в другом месте. Вы, вероятно, можете исправить некоторые вещи, чтобы помочь. Старайтесь распределять вещи по возможности. Вам действительно нужен указатель на карту? Я предлагаю вам не:
#include <map>
class MyObject
{ };
int main(void)
{
typedef std::map<int, MyObject*> MyMap;
MyMap myMap;
MyObject *obj = new MyObject;
myMap.insert(MyMap::value_type(0, obj));
delete obj;
}
А вам действительно нужно хранить указатели на объект или объекты?
#include <map>
class MyObject
{ };
int main(void)
{
typedef std::map<int, MyObject> MyMap;
MyMap myMap;
myMap.insert(MyMap::value_type(0, MyObject()));
}
Намного меньше, и почти невозможно получить утечки памяти. Если вам do необходимо хранить указатели, для полиморфного поведения проверьте библиотеку boost :: ptr_container , которая имеет адаптер карты , в котором хранятся указатели .