提升:如何从现有属性树中获取子树?

时间:2014-04-02 12:27:51

标签: c++ boost boost-propertytree

我正在尝试使用boost::ptreeget_child获取子树,如下所示:

我有:

class ConfigFile
{
  ptree pt;
  ConfigFile(const string& name)
  {
    read_json(name, pt);
  }
  ptree& getSubTree(const string& path)
  {
    ptree spt = pt.get_child(path);
    return spt;
  }
}

当我打电话

ConfigFile cf("myfile.json");
ptree pt = cf.getSubTree("path.to.child")

函数在返回

后崩溃
terminate called after throwing an instance of 'std::length_error'

有人可以帮我吗?我做错了什么?

1 个答案:

答案 0 :(得分:6)

您正在返回对本地的引用。那不会奏效。阅读本文:

Can a local variable's memory be accessed outside its scope?

修正:

ptree getSubTree(const string& path)
{
     return pt.get_child(path);
}

你的结果是Undefined Behaviour的一个表现,在不同的日子,编译器,运行可能会有所不同......