gpt4 book ai didi

c++ - 在 `std::map` 中存储对象时代码崩溃

转载 作者:太空狗 更新时间:2023-10-29 23:38:23 25 4
gpt4 key购买 nike

 typedef std::map<int, MyObject*> MyMap;
MyMap* myMap = new MyMap;
// ...
myMap->insert( MyMap::value_type( 0, objectOfType_MyObject ) );

为什么我的代码会崩溃,堆栈跟踪会下降到

 std::less<int>::operator()

?

我知道如果我使用自定义键类,我必须提供一个比较器,但这是一个 int。

我以前从未使用过 map ,这可能是一个愚蠢的问题,但我已经坚持这个问题很久了。

谢谢

最佳答案

此代码对我有效(编译和运行):

#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 可以做什么)或其他地方。您可能可以稍微解决一下以提供帮助。尽可能尝试堆叠分配东西。你真的需要一个指向 map 的指针吗?我建议你不要:

#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 .

关于c++ - 在 `std::map` 中存储对象时代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1261680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com