VC++通過MSXML6來操作xml需要注意的記憶體洩漏問題
VC++通過MSXML6來操作xml需要注意的記憶體洩漏問題
1. 建立IXMLDOMDocument 物件,注:在使用完成後需要release,而不是立馬release,立馬釋放了就沒法使用了
HRESULT hr;
IXMLDOMDocument *pXmlDoc = NULL;
hr = CoCreateInstance(__uuidof(DOMDocument),NULL,CLSCTX_INPROC_SERVER,
__uuidof(IXMLDOMDocument),(void**)&pXmlDoc);
pXmlDoc->Release();
2. 獲取IXMLDOMNode, 同上,需要使用完成後釋放
IXMLDOMNode* pXMLFirstChild = NULL;
pIXMLDOMDocument->get_firstChild(&pXMLFirstChild);
pXMLFirstChild.Release();
3. 獲取屬性集IXMLDOMNamedNodeMap, 同上,需要使用完成後釋放
IXMLDOMNamedNodeMap* pXMLAttributeMap = NULL;
if (pXMLFirstChild)
{
pXMLFirstChild->get_attributes(&pXMLAttributeMap);
}
pXMLAttributeMap.Release();
4. 建立屬性IXMLDOMAttribute, 同上,需要使用完成後釋放
IXMLDOMAttribute* pEncodeAttribute=NULL;
pXMLAttributeMap->setNamedItem(pEncodeAttribute, &pXMLEncodNode);
pEncodeAttribute.Release();
5. 獲取節點內容,需要釋放
BSTR bstr = NULL;
pNode->get_text( &bstr);
if(bstr)
{
SysFreeString(bstr);
}