0

yaml ファイルを解析するとき、通常はパーサーからルート ノードを取得します。

そして、解析プロセス後にルートノードを参照できるかどうか疑問に思っています。以下のように。

YAML::Node* globalRoot;

void ParseDocument(filename)
{
  YAML::Parser parser(fin)
  parser.GetNextDocument(*globalRoot);
}

void myFunction()
{
  ParseDocument("myYAML.yml");

  // After the method above, we lose the parser instance since it's a local variable.
  // But if all child data is copied, below code should be safe.
  // If globalRoot is just pointing inside the parser, this could be dangerous.

  std::string stringKey;
  (*globalRoot)["myKey"] >> stringKey;
}

上記のようなコードを使用できますか??

4

1 に答える 1

2

はい、そうです。 aNodeが解析されると、 のメモリには依存しませんParser

つまり、あなたの例では、 が指すノードを実際に構築することはありませんglobalRoot。電話する必要があります

globalRoot = new YAML::Node;

さらに良いことに、のようなスマートポインターに保管してstd::auto_ptrください。

于 2011-02-23T04:03:33.197 に答える