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

时间:2012-02-16 15:38:24

标签: c++ com destructor atl

我在ATL COM对象中定义的东西的析构函数代码在哪里?

是应该进入~MyComClass()还是MyComClass::FinalRelease()

2 个答案:

答案 0 :(得分:10)

只要FinalRelease有问题,我认为你的问题与ATL有关。

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

也就是说,您通过两个步骤进行清理,首先引用FinalRelease中的聚合对象,然后引用FinalRelease或析构函数中的其他内容。

答案 1 :(得分:1)

这是一般方法:

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有关。