tinyXml内存泄露的问题

这几日一直在抽空用tinyXml来配置OSG场景图,刚把读的问题解决,准备着手由程序把场景图写入XML的问题,回顾以前熟悉tinyXml写的读写xml的程序,发现new出来的tinyXmlNode节点都没delete,这必然存在内存泄露,今天用_CrtDumpMemoryLeaks()查了一下,果然是。

然后我把所有 tinyXmlNode节点都delete了,结果报错,查了一下TiXmlNode的源码(开源的好处),TiXmlNode的析构函数如下:

TiXmlNode::~TiXmlNode()
{
    TiXmlNode* node = firstChild;
    TiXmlNode* temp = 0;

    while ( node )
    {
        temp = node;
        node = node->next;
        delete temp;
    }    
}

原来对于子节点的释放工作,TiXmlNode已经帮我们做好了,这就方便了,在我以前的程序里直接delete pXmlDoc这个根节点就OK了。

再查一下,果然没有内存泄露了。

另外,TiXmlNode还有一个clear()函数用来释放子节点,不过对当前节点不做处理 ,如果你的当前节点还有用,但子节点无用了,用这个函数也是很方便的。

另外,我看到网上有人如此释放内存

pXmlDoc = NULL;

delete pXmlDoc;

经检验这样只是释放了当前节点而没能释放子节点。我想是应为当你将根节点设为NULL后,打破了其与子节点的联系,子节点便不能被自动释放了。


posted @ 2010-04-03 18:57  du's utopia  阅读(2847)  评论(0编辑  收藏  举报