在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
项目中需要用到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。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论