我看了我在xerces互联网上生成XML的示例。 Transcode函数似乎执行一些编码,但是填充到其中的缓冲区永远不会释放。根据文档,您必须手动释放ti:
doc-> release可以从内存中释放它吗?
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();
最佳答案
如果我误解了,请原谅我,但是您在那里使用的transcode
版本实际上并未创建或返回任何缓冲区,因为它正在修改您提供的缓冲区(tempStr
)。您的示例代码不会泄漏内存。
确实返回缓冲区的transcode
版本(例如,除示例代码块中的版本以外的所有其他版本)使用MemoryManager
实例执行分配。这里的文档似乎很少,但是据我所知,默认的XMLPlatformUtils::fgMemoryManager
没有要求清理它分配的任何内存。因此,您应该假定自己需要销毁返回的缓冲区。