使用QSharedPointers作为值

时间:2015-10-31 14:04:47

标签: c++ qt qmap qsharedpointer

我有一个包含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();
}

团队映射内容:

  • (&#34;底特律&#34;,团队),//团队对象,参数&#34; Detroit&#34;作为城市 和#34;乔路易斯竞技场&#34;作为竞技场。
  • (&#34; Pittsburgh&#34;,Team)//团队对象 参数&#34; Pittsburgh&#34;作为城市和&#34;梅隆竞技场&#34;既然如此。

qDebug输出是:

  

&#34;底特律&#34; - &#34; Mellon Arena&#34;
  &#34;&#34; - &#34; Mellon Arena&#34;

这里发生了什么?为什么输出从正确的对象和区域中获取城市?

我来自python背景,显然这里的内存处理不正确。但我搜索了一些例子,并且不知道这里有什么问题。

我也尝试从地图中获取密钥并使用该方法从地图中搜索值,但在第一次循环后程序崩溃。

0 个答案:

没有答案