2011-09-02 132 views
1

在具有_com_ptr_t成员的C++类中,如果CreateInstance()在同一个指针上重复使用以获取COM对象的新实例,而不首先执行Release(),是否会内存泄漏?有据可查的是,当这些智能指针之一超出范围时ref ref会减少,并且封装指针不是Detach()。当重复CreateInstance()时,MSDN似乎没有提及ref ref的含义。在重新分配CreateInstance之前需要释放com_ptr_t?

回答

5

由于_com_ptr_tCreateInstance()的开头调用Release(),所以不会发生泄漏,您可以通过阅读_com_ptr_t实现轻松验证自己。

+0

感谢锐利。在Visual Studio IDE的源代码中,我遇到了麻烦_com_ptr_t :: CreateInstance,大概是因为它是一个模板。引用MSDN将comip.h标识为感兴趣的源文件。我花了一分钟才意识到替代原型调用主版本(将CLSID作为第一个参数),在做其他任何事情之前清楚地调用_Release()。再次感谢。 – fitz

0

在调用CoCreateInstance()之前,CreateInstance()调用 _Release()。请参阅里面的实现。

相关问题