IUnknown 接口是组件对象模型(COM)中的基础接口。COM规格书中规定COM对象至少要实现此一接口,而且其他所有的COM接口都需要派生自IUnknown接口。
IUnknown提供所有COM对象都支持的两种基本特性:
- 利用引用计数来进行对象生命周期管理;(控制对象生命周期)
- 以及访问许多事先定义的接口。(接口查询)
IUnknown接口会包括一个指向虚拟方法表(英语:virtual method table)的指针,虚拟方法表是一个有许多函数指针的列表,函数指针会指向许多实现IUnknown接口所宣告的函数,以和接口中宣告顺序相同的方式排列。而进程内调用产生的开销(英语:Overhead (computing))大致和C++中调用虚拟方法的开销相近。
方法
对象生存期由两个方法控制,AddRef
和Release
,以及内部引用计数器。每个对象都必须具有IUnknown的实现来控制其生命周期。无论何时创建或复制接口指针,都会调用AddRef
方法,当客户端不再需要此指针时,将调用相应的Release
方法。当引用计数达到零时,对象会自行销毁。
客户端还使用IUnknown获取对象上的其他接口。QueryInterface
是客户端在需要对象上的另一个接口时调