我在ATL COM对象中定义的东西的析构函数代码在哪里?
是应该进入~MyComClass()
还是MyComClass::FinalRelease()
?
答案 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有关。