在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对象。