typedef std::map<int, MyObject*> MyMap;
MyMap* myMap = new MyMap;
// ...
myMap->insert( MyMap::value_type( 0, objectOfType_MyObject ) );
为什么我的代码会因堆栈跟踪故障而崩溃
std::less<int>::operator()
?
据我所知,如果我使用自定义键类,我必须提供比较器,但这是一个int。
我之前从未使用过地图,这可能是一个愚蠢的问题,但我现在已经坚持了很久。
由于
答案 0 :(得分:11)
此代码适合我(编译和运行):
#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()));
}
小得多,几乎不可能得到内存泄漏。如果你做需要存储指针,那么对于多态行为,请查看boost::ptr_container library,其中map adapter that stores pointers。