項目中需要用到C++解析XML,網上搜到tinyxml這么個開源庫,就用了下試試,創建對象后內部自帶Clear方法,但在循環測試的時候(剛用C++做項目不久,不會什么特別的內存泄漏測試工具,於是就寫個死循環反復執行功能函數),用任務管理器查看發現內存一直在增大。。。后來通過調試發現,Clear只會清除其子節點,而自己本身不會釋放,所以需要自己補上。代碼如下:
1 #include <iostream> 2 #include "tinyxml.h" 3 #include "tinystr.h" 4 #include <string> 5 6 using namespace std; 7 8 9 10 // 創建xml文件 11 int CreateXmlFile1(const char *szFileName) 12 { 13 int ret = 0; 14 // 創建一個文檔對象 15 TiXmlDocument *myDocument = new TiXmlDocument(); 16 // 創建一個根元素並連接 17 TiXmlElement *root = new TiXmlElement("root"); 18 19 myDocument->LinkEndChild(root); 20 // 創建in節點並鏈接到root內 21 TiXmlElement *in = new TiXmlElement("in"); 22 in->SetAttribute("ID", 1); 23 root->LinkEndChild(in); 24 // 25 TiXmlElement *CardID = new TiXmlElement("Name"); 26 CardID->SetValue("123213"); 27 in->LinkEndChild(CardID); 28 myDocument->SaveFile(szFileName); 29 30 myDocument->Clear(); // 只是清除子節點 31 delete myDocument;// 釋放自己 32 return ret; 33 } 34 35 void main() 36 { 37 while (true) 38 { 39 CreateXmlFile1("file.xml"); 40 } 41 system("pause"); 42 }
當然其實tinyxml內部是有ClearThis方法的,不過有protected標簽,所以解決該問題也可以在Clear方法內調用ClearThis方法,或者把ClearThis設為Public。
