不包含关键字“New”的VB6程序是否会出现内存泄漏?
如果是,请提供一个例子。
答案 0 :(得分:4)
总结到目前为止的答案:调用另一个组件可能会引入内存泄漏。组件可能有问题,或者您可能会误用它。该组件可以是OCX或DLL(包括对Windows DLL的API调用,这是泄漏内存和Windows资源的绝佳方式,更不用说其他许多令人兴奋的问题了。)
一个迂腐的观点:你可以使用CreateObject
创建对象,这样你就可以通过circular references泄漏内存而不使用New
。 onedaywhen在评论中指出,您还可以使用表单变量创建循环引用,而不使用New
。但我认为问题的关键在于VB6内存泄漏是否会导致除循环引用之外的其他原因。
递归的answer不会导致内存泄漏 - 引用计数会在每次执行循环时整理内存 - 请参阅我对答案的评论。
答案 1 :(得分:3)
您可能正在调用有内存泄漏的第三方DLL。
答案 2 :(得分:2)
是的,它可以。在我了解特定Windows API调用中的内存泄漏之前,我编写的使用Transparent Blits的VB6程序表现出内存泄漏。因此,虽然泄漏不在程序本身,但它是在VB6在Win32 API中调用的函数之一。
答案 3 :(得分:1)
...并且不要忘记OCX中的内存泄漏
答案 4 :(得分:0)
在COM +下运行时,我们在模块中使用全局变量进行了泄漏。这是很久以前不记得的具体细节。
答案 5 :(得分:0)
对内存泄漏的新见解是什么?除了在将参考变量设置为Nothing之后触摸参考变量来分配另一个对象之外,我没有看到任何关系。
如果你这样做,你可能还是有一个逻辑错误。不使用New只是意味着你会爆炸,而不是我想要“修复”任何东西。
最严重的泄漏可能涉及API调用,例如需要对隐式分配的数据结构进行显式清理/释放的OLE或GDI例程。
但正如我所说,将New与内存泄漏联系起来听起来很疯狂。