我看了一下我在互联网上发现的生成XML的xerces的例子。 Transcode函数似乎执行某些编码,但它填充的缓冲区永远不会释放。根据文档,您必须手动释放ti:
注意:返回的缓冲区是动态分配的,调用者有责任在不再需要时删除它。您可以调用XMLString :: release来释放此返回的缓冲区。
可以doc->释放从内存释放吗?
XMLCh tempStr[100];
XMLString::transcode("Range", tempStr, 99);
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(tempStr, 0);
XMLString::transcode("root", tempStr, 99);
DOMDocument* doc = impl->createDocument(0, tempStr, 0);
DOMElement* root = doc->getDocumentElement();
XMLString::transcode("FirstElement", tempStr, 99);
DOMElement* e1 = doc->createElement(tempStr);
root->appendChild(e1);
XMLString::transcode("SecondElement", tempStr, 99);
DOMElement* e2 = doc->createElement(tempStr);
root->appendChild(e2);
doc->release();
答案 0 :(得分:1)
如果我误解了,请原谅我,但你在那里使用的transcode
版本并没有在行为上创建或返回任何缓冲区,因为它正在修改你提供的缓冲区({{1} }) 到位。您的示例代码不会泄漏内存。
做的tempStr
版本返回缓冲区(例如,除示例代码块中的版本之外的所有其他版本)使用transcode
实例执行分配。这里的文档似乎有点稀疏,但据我所知,默认MemoryManager
没有声称要清理它已经分配的任何内存。因此,您应该假设您需要自己销毁该返回的缓冲区。
答案 1 :(得分:1)
不,doc->release()
没有释放缓冲区。
正如您引用的文档所述,如果您正在调用返回转码字符串的XMLString::release()
函数,则 需要使用transcode
释放缓冲区:
char *str = XMLString::transcode(someStringVarToBeTranscoded);
XMLString::release(&str);
您的示例不需要执行此操作,因为您使用的transcode
函数返回boolean
值。