为什么实现接口的Delphi对象需要引用计数?

时间:2014-03-05 11:14:59

标签: delphi interface com

换句话说,为什么他们不能像常规对象那样手动管理?或者Delphi设计师刚刚决定使用引用计数,因为它仍然需要COM?

1 个答案:

答案 0 :(得分:11)

首先要建立的是将接口添加到Delphi以支持COM。因此,很多设计决策都是为了让COM编程变得更容易。

接口引用完全可以手动管理。事实上,C和C ++中的原始COM最初涉及手动引用计数管理,并显式调用AddRefRelease。从C中使用COM对象时,仍需要执行手动引用计数管理。对于C ++,您通常使用类似CComPtr的类来启用自动引用计数管理。

当向Delphi添加COM支持时,Delphi的主要竞争对手是VB。在VB中,您从未必须进行手动引用计数管理。如果Delphi设计人员没有实现自动引用计数管理,那么让VB程序员离开VB并开始使用Delphi会更加困难。因此,我推测这是德尔福设计师做出的决定的驱动因素。即使不是这种情况,对自动引用计数进行编码比手动编程要容易得多。因此,即使我的推测是错误的,德尔福设计师所做的决定也会让生活变得更加简单。

所以提出你的具体问题:

  

为什么不像常规对象那样手动管理它们?

他们可以。您可以实现_AddRef_Release,以便它们不会控制对象的生命周期。具体而言,这些方法不是必须计算引用,也不是_Release调用Free

  

Delphi设计师是否决定使用引用计数,因为COM需要它?

嗯,COM不需要它。如上所述,您可以使用C或C ++(或其他语言)对COM进行编码,而无需自动引用计数。


您可能会问的另一个问题是,为什么Delphi接口必须派生自IInterface。这源于它们最初的目的,即实现COM接口。在许多方面,如果我们可以拥有不是从IInterface派生的接口,那就太好了。但事实就是如此。