我在ATL COM对象中定义的内容的析构函数代码在哪里?
应该用~MyComClass()
还是MyComClass::FinalRelease()
?
最佳答案
只要存在FinalRelease
问题,我就假设您的问题与ATL有关。
在大多数情况下,您可以同时清理两者中的任何一个。 FinalRelease
将在实际析构函数之前立即调用。重要的区别是,如果您聚合其他对象,则FinalRelease可以使您有机会在顶级COM对象类(尤其是CComObject
)的实际析构函数开始工作之前清理引用并释放依赖项。
也就是说,您需要分两步清理内容,首先是在FinalRelease
中引用聚合对象,然后在FinalRelease
或destructor中引用其他内容。