我正在编写一些代码,这些代码使得(相对简单)使用COM,在某些对象上调用AddRef()并稍后释放它们。除了真正彻底检查代码之外,还有一种方法可以检查我是否在任何地方泄漏COM对象?
(我不能使用引用计数IBlahBlahPtr
因为我需要将对象传递给一组不知道COM是什么的API,所以不理解整个“引用计数”指针“东西 - 它们像指针一样传递指针。”
谢谢!
答案 0 :(得分:1)
与检查任何C或C ++代码中的泄漏没有什么不同。使用<crtdbg.h>
检测泄漏,MSDN库文章is here。如果没有足够的IUnknown :: Release()调用,您将获得类工厂的泄漏报告。
引用计数接口指针是一个硬COM要求,你不能只是耸耸肩。如果客户端代码没有这样做,那么在传递指向该代码的指针之前,您必须自己处理它。知道指针何时不再使用当然是棘手的问题。
答案 1 :(得分:0)
如果你使用CrtDebug DEBUG_NEW来分配你的对象,你将在退出时自动转储所有泄漏的对象(基本上,所有未释放的内存),以及文件名和内存所在的行。分配
答案 2 :(得分:0)
根据我们在评论中的对话,我会说你可以做以下事情:
IBlahBlahPtr
)在您自己的代码中创建和管理COM对象。答案 3 :(得分:0)
各种工具将为您检查。 BoundsChecker。我认为,但并非100%确定,AppVerifier确实如此(它具有免费的额外好处)。