C++ 在“std::map”中存储对象时代码崩溃` typedef std::map MyMap; MyMap*MyMap=新建MyMap; // ... myMap->insert(myMap::value_type(0,objectOfType_MyObject));
为什么我的代码会崩溃,堆栈跟踪会下降到C++ 在“std::map”中存储对象时代码崩溃` typedef std::map MyMap; MyMap*MyMap=新建MyMap; // ... myMap->insert(myMap::value_type(0,objectOfType_MyObject));,c++,stl,map,C++,Stl,Map,为什么我的代码会崩溃,堆栈跟踪会下降到 typedef std::map<int, MyObject*> MyMap; MyMap* myMap = new MyMap; // ... myMap->insert( MyMap::value_type( 0, objectOfType_MyObject ) ); std::less::operator() ? 我知道,如果我使用自定义键类,我必须提供一个比较器,但这是一个int 我以前从未使用过地图,这可能是一个愚蠢
typedef std::map<int, MyObject*> MyMap;
MyMap* myMap = new MyMap;
// ...
myMap->insert( MyMap::value_type( 0, objectOfType_MyObject ) );
std::less::operator()
?
我知道,如果我使用自定义键类,我必须提供一个比较器,但这是一个int
我以前从未使用过地图,这可能是一个愚蠢的问题,但我已经被困在这个问题上很久了
谢谢这段代码为我工作(编译和运行):
你们真的需要存储指向对象的指针吗
#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;
}
#包括
类MyObject
{ };
内部主(空)
{
typedef std::map MyMap;
我的地图;
insert(myMap::value_type(0,MyObject());
}
更小,而且几乎不可能获得内存泄漏。如果您确实需要存储指针,对于多态行为,请检查,它有一个。所有堆栈跟踪是什么样子的?提供完整的堆栈跟踪或使用valgrind检测一些内存滥用:-)可能是一个愚蠢的注释。但是您确定在插入之前没有删除myMap对象吗?回答很好;在最后一个例子中,他可能还需要为MyObject定义一个副本构造函数。我的问题是我没有在初始化类时对映射进行.clear()初始化。(即使大小为0)。我正在存储Obj-C对象
#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;
}
#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()));
}