DOMDocument c++内存管理
DOMDocument C++ memory management
关于c++中DOM*类createXXX方法的问题。我是否必须做任何特别的事情来释放从DOM* createXXX方法返回的内存?
例如(为了简化而删除了转码和与转码操作相关的变量的相关版本,我知道这些):
pImplement = DOMImplementationRegistry::getDOMImplementation("LS");
DOMDocument* pDoc = pImplement->createDocument("Examples", "example", NULL );
DOMElement* pRoot = pDoc->getDocumentElement();
DOMElement* firstElement = pDoc->createElementNS(("Examples", "example");
DOMElement* secondElement = pDoc->createElementNS("Examples", "example2");
DOMAttr* name = pDoc->createAttribute("Name");
XMLCh* somenameValue = XMLString::transcode("Fred");
name->setValue(somenameValue);
secondElement->setAttributeNode(name);
firstElement->appendChild(secondElement);
当我最终离开方法时,我是否必须为firstElement, secondElement, name做任何特别的事情来从createXXX方法中释放内存?或者pdoc拥有所有的内存,我必须等待销毁DOMDocument?
它加入了讨论,我循环遍历名称/值逻辑并向secondElement添加多个属性。
谢谢。
根据我使用DOM类的经验,您不必删除添加到DOM树中的任何内容。例如,将子元素secondElement
附加到元素firstElement
。当后者被释放时,它也会释放secondElement
。然而,我在这里看到两件事情会泄漏。首先,不将firstElement
插入DOM树,其次,在离开时不显式地删除pDoc
。您必须释放元素,或者将其添加到DOM树中,并在稍后的代码中删除它。
注意:根据所涉及的函数的名称,我假设您谈论的是Xerces-C。
您只需要在树的根上调用release(可以是DOMElement(删除树的一个"分支")或DOMDocument(删除整个树))。
因此,在末尾添加对pDoc->release();
的调用将负责释放文档和附加到该文档的所有节点的内存。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 可以通过非原始指针来增强容器矢量管理内存
- 如何使用 std::vector<std::tuple<A,B>> 来管理内存(调整大小、保留,...),但实际上将 As 保留在 B 之前,连续
- 线程管理内存泄漏
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 管理内存C++
- ptr_vector如何管理内存
- 在C++Builder/Firemonkey中使用表单创建来管理内存
- 如何正确管理内存(运行时)C++
- 在Node.js中使用Native Abstractions时,如何管理内存
- ostream是如何管理内存的
- C++中管理内存泄漏的问题
- OpenCL:在 CPU 上而不是在 GPU 上更正结果:如何正确管理内存
- deque是如何管理内存的
- 用c++/cli互操作管理内存
- 如何衡量管理内存所花费的时间
- (加速C++)章节管理内存
- 如何在此场景中管理内存