tinyxml一些应注意的问题

 今天在对使用tinyxml库的程序调试的时候,出现的一些问题让人很纠结,特记以此...
在对TixmlDocument创建时我是用new创建的,然后在用完之后我用delete释放掉,可是用gdb调试的时候出现double free,然后我注释掉了delete,调试通过。但是另一个问题又出现了,在另一函数中我Load相同的xml文件时出现malloc错误,就是LoadFile源码中 TIXML_STRING filename( _filename )出错了,这让我情何以堪,纠结了很长时间都没有遭到办法。
  出于对new TixmlDocument之后又不能delete的不适,我放弃了在堆上创建TixmlDocument的方法,改用在栈上创建TixmlDocument,其他的一些节点元素则还是用new创建。修改之后,调试通过。
  new出来的其他节点只要是连接到TixmlDocument,都不要手动销毁,因为在析构TixmlDocument的时候,其相应的子节点也是会被一起销毁的,其析构代码如下
 1 TiXmlNode::~TiXmlNode()
 2 {
 3     TiXmlNode* node = firstChild;
 4     TiXmlNode* temp = 0;
 5 
 6     while ( node )
 7     {
 8         temp = node;
 9         node = node->next;
10         delete temp;
11     }    
12 }

所以我的观点是以后在用tinyxml时,TixmlDocument最好在栈上创建,其子节点都应用new在堆上创建,否则在TixmlDocument析构的时候不会将子节点销毁

原文地址:https://www.cnblogs.com/lpxblog/p/5644387.html