我看了我在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没有要求清理它分配的任何内存。因此,您应该假定自己需要销毁返回的缓冲区。

09-07 04:38