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