Boost: как получить поддерево из существующего дерева свойств?

Я пытаюсь получить поддерево от boost::ptree используя get_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 ответов


вы возвращаете ссылку на local. Это не сработает. Прочтите это:

можно ли получить доступ к памяти локальной переменной вне ее области?

исправления:

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

ваш результат был manifestition из Неопределено Поведение и может отличаться в разные дни, компиляторы, запуски...