在C++ DOM編程中,通過DOM對象接口的各種函數獲得的指向各種DOM對象的接口指針,其引用計數的變化是怎樣的?在程序中該如何使用(顯式或隱式調用AddRef)和釋放(顯式調用Release)接口指針呢?
MSDN DOM sample 上的一個示例很好的說明了這些原則,下面對這篇文章的代碼做些總結說明。
總結一下,DOM接口指針使用和釋放的規律為:
1. 通過DOM對象接口函數(當然也包括通過CoCreateInstance獲得的IXMLDOMDocument)獲得的接口指針,需要顯式的調用 Release釋放。這些函數如IXMLDOMDocument->createElement, IXMLDOMNode->appendChild。
2. 對于手動賦值的接口指針(如代碼中的pElemA = pElemOut),需要顯式的在被賦值的指針上(pElemA)調用AddRef和Release,來增、減引用計數。
3.其他的使用則無需增減引用計數。
其他:
Release()返回引用計數減1后的值,即如果原來引用計數為1,則Release()返回值為0.
IXMLDOMNode->appendChild()的輸出參數接口指針在值上與輸入參數接口指針相同,因此二者指向同一個DOM對象。