gpt4 book ai didi

c++ - IUknown 派生接口(interface)上的虚拟析构函数

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:52 25 4
gpt4 key购买 nike

我一直在通过阅读一些现有代码来学习一些代码。我知道在非 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com