在使用TinyXml for C ++时,我需要清理哪些内存管理?

时间:2009-05-12 16:02:55

标签: c++ memory-management tinyxml

我正在使用TinyXml执行以下操作:

TiXmlDocument doc;
TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" );
TiXmlElement* main = new TiXmlElement("main");

TiXmlElement* header = new TiXmlElement("header");
header->SetAttribute("attribute","somevalue");
main->LinkEndChild(header);

// ... Add many more TiXmlElment* to other elements all within "main" element

doc.LinkEndChild(decl);
doc.LinkEndChild(main);

// ... do stuff with doc

// Now I am done with my doc. What memory management happens here? 

在我的程序执行结束时,当TiXmlElement*超出范围时,是否会清除所有doc?我是否需要遍历文档树并自行释放所有内存?

2 个答案:

答案 0 :(得分:11)

documentation for LinkEndChild说:

  

注意:要添加的节点由指针传递,然后由tinyXml拥有(并删除)。这种方法很有效并且避免了额外的复制,但是应该小心使用,因为它使用的内存模型与其他插入函数不同。

答案 1 :(得分:-1)

您使用new分配的任何内容永远不会自动清理 - 您(或至少某人)需要致电delete header;

我说“有人”,因为TiXmlDocument对象可能拥有这些对象的所有权并自行清理它们 - 知道这一点的唯一方法就是查看TinyXML的文档。

如果它不占用所有权,那么最好只在堆栈中声明本地对象:

TiXmlDeclaration decl( "1.0", "", "" );    // etc.

如果您需要在函数末尾保留对象,则使用共享指针会更安全,例如Boost's shared_ptr