我有一个包含QSharedPointers作为值的QMap。每次我尝试循环遍历地图并且qDebug结果我得到了内存处理错误。
map的值是Team类的对象,它继承自QObject。
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();
}
团队映射内容:
qDebug输出是:
&#34;底特律&#34; - &#34; Mellon Arena&#34;
&#34;&#34; - &#34; Mellon Arena&#34;
这里发生了什么?为什么输出从正确的对象和区域中获取城市?
我来自python背景,显然这里的内存处理不正确。但我搜索了一些例子,并且不知道这里有什么问题。
我也尝试从地图中获取密钥并使用该方法从地图中搜索值,但在第一次循环后程序崩溃。