我有一个包含 QSharedPointers 作为值的 QMap。每次我尝试遍历地图并 qDebug 结果时,我都会遇到内存处理错误。
地图的值是继承自 QObject 的 Team 类的对象。
QMap 定义:
QMap<QString, QSharedPointer<Team>> teams;
执行:
auto json_result = GetJsonObject(raw_json);
auto json_error = json_result.second;
if (json_error.error != QJsonParseError::NoError)
{
ShowJsonParseError(json_error);
}
auto json_obj = json_result.first;
for (QString& city : json_obj.keys())
{
auto team_obj = json_obj[city].toObject();
teams.insert(city, QSharedPointer<Team>(new Team(this, city,
team_obj["Arena"].toString())));
}
for (auto team : teams.values())
{
qDebug() << team->getCity() << " - " << team->getArena();
}
团队地图内容:
- ("Detroit", Team), // Team 对象,参数“Detroit”为城市,“Joe Louis Arena”为竞技场。
- ("Pittsburgh", Team) // 参数“Pittsburgh”为城市,“Mellon arena”为参数的 Team 对象。
qDebug 输出为:
“底特律” - “梅隆竞技场”
“” - “梅隆竞技场”
这里会发生什么?为什么输出从正确的对象和下一个对象的区域中获取城市?
我来自 python 背景,显然这里的内存处理不正确。但是我已经搜索了示例并且不知道这里有什么问题。
我也尝试从地图中获取键并使用它从地图中搜索值,但是在第一次循环后程序崩溃。