我一直在通过阅读一些现有代码来学习一些代码。我知道在非 com 类型的接口(interface)上使用虚拟析构函数的重要性。我的意思是它不是从 IUnkown 或 IInspectable 派生的。
但是,我无法理解为什么不需要在 COM 接口(interface)上使用虚拟析构函数。
我的接口(interface)是这样定义的
MIDL_INTERFACE("0D70D782-809D-403B-AC95-XXXXXX")
IMyInterface : IUnknown
{
public:
virtual bool method1() = 0;
virtual int method2() = 0;
}
同时我还有另一个接口(interface),它不是像这样从 IUnkown 派生的
class ISampleLogic
{
public:
virtual ~ISampleLogic() {};
//some more methods
}
为什么第一个接口(interface)没有虚析构函数?
提前致谢
最佳答案
IUnknown
有一个名为 Release()
的方法。它的工作是减少对象的引用计数,并在引用计数降为零时销毁该对象。所以它充当析构函数;因此不需要显式析构函数。
如果你有一个IUnknown
指针(比如IUnknown* punk
),你不应该删除
它,而是调用Release ()
而不是 (punk->Release()
)。这是因为其他进程可能对该对象有引用计数。
这取决于接口(interface)的实现,以确保删除整个对象。如有必要,该实现很可能包含具有虚拟析构函数的类。
关于c++ - IUknown 派生接口(interface)上的虚拟析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27289202/