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

应该用~MyComClass()还是MyComClass::FinalRelease()

最佳答案

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

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

也就是说,您需要分两步清理内容,首先是在FinalRelease中引用聚合对象,然后在FinalRelease或destructor中引用其他内容。

08-26 17:06