ATL COM 对象的析构函数代码应该放在哪里?

发布于 2025-01-06 10:23:39 字数 126 浏览 0 评论 0原文

我在 ATL COM 对象中定义的内容的析构函数代码属于哪里?

它应该放在 ~MyComClass() 中还是 MyComClass::FinalRelease() 中?

Where does the destructor code for things I have defined in an ATL COM object belong?

Should it go in ~MyComClass() or in MyComClass::FinalRelease()?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

栀子花开つ 2025-01-13 10:23:39

只要 FinalRelease 存在问题,我就假设您的问题与 ATL 相关。

在大多数情况下,您可以使用两者中的任何一个来清理内容。 FinalRelease 将在实际析构函数之前立即调用。重要的区别是,如果您聚合其他对象,FinalRelease 使您有机会在顶级 COM 对象类(尤其是 CComObject)的实际析构函数开始工作之前清理引用并释放依赖项。

也就是说,您可以分两步清理内容,首先引用 FinalRelease 中的聚合对象,然后引用 FinalRelease 或析构函数中的其他内容。

As long as FinalRelease is in question, I assume your question is related to ATL.

In most cases you can clean things up in either of the two. FinalRelease will be called immediately before the actual destructor. The important difference is that if you aggregate other objects, FinalRelease gives you a chance to clean the references and release dependencies before actual destructor of top level COM object class (esp. CComObject) starts working.

That is, you clean things up in two steps, first references to aggregated objects in FinalRelease and then other things in either FinalRelease or destructor.

垂暮老矣 2025-01-13 10:23:39

这是一般方法:

MyComClass::~MyComClass()
{
    // Cleanup object resources in here.
}

ULONG __stdcall MyComClass::Release()
{
    ref_count_--;

    if (0 == ref_count_)
    {
        delete this;
        return 0;
    }

    return ref_count_;
}

编辑:FinalRelease() 似乎与我不熟悉的 ATL 相关。

This is the general approach:

MyComClass::~MyComClass()
{
    // Cleanup object resources in here.
}

ULONG __stdcall MyComClass::Release()
{
    ref_count_--;

    if (0 == ref_count_)
    {
        delete this;
        return 0;
    }

    return ref_count_;
}

EDIT: FinalRelease() appears to be related to ATL which I am unfamiliar with.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文