使用 yaml-cpp 解析 YAML 文件时,是否“复制”?所有子节点?
在解析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;
}
我可以使用上面的代码吗?
When parsing yaml file, normally we get root node from parser.
And I'm wondering if I can reference the root node after parsing process. Like below.
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;
}
Can I use like code above??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,确实如此 - 一旦
Node
被解析,它就不再依赖Parser
中的任何内存。也就是说,在您的示例中,您从未实际构造
globalRoot
指向的节点。您需要调用,甚至更好地将其保存在像 std::auto_ptr 这样的智能指针中。
Yes, it does - once a
Node
is parsed, it does not rely on any memory from theParser
.That said, in your example, you never actually construct the node pointed to by
globalRoot
. You'd need to calland even better, keep it in a smart pointer like
std::auto_ptr
.