vb类的销毁函数何时被调用?

thllv 2010-04-12 05:51:38
我是在access的vba里定义了一个类模块,初始化及调用都正常
Private Sub Class_initialize()的调用是正常的

最后 “Set m_窗体 = Nothing ” ‘m_窗体 是类的实例
Private Sub Class_terminate() 这个销毁函数并没有被调用?什么原因啊?

哪位大侠指点下在纯vb下是怎样的?
...全文
161 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2010-04-13
  • 打赏
  • 举报
回复
必须使用 Set Nothing 的地方
1)要控制对象的释放次序,比如 Excel 无法关闭的问题。
2)解除对象的循环引用,这导致内存泄漏。
thllv 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lhcwjy 的回复:]
程序中并没有显式去释放它,此情况VB会自动释放它吗?
这个你不用担心,编译器会自动生成代码去销毁这些对象的,并且销毁的时机是发生在Class_terminate() 之后的
[/Quote]

这样是不是说明:“VB就根本不存在内存泄露
这个判断是正确的?
那么“Set m_窗体 = Nothing ”也可以去掉了?(事实上我试了,去掉这句程序也貌似工作正常)

set object=nothing 这样的语句在什么情况下是必须的?

东方之珠 2010-04-12
  • 打赏
  • 举报
回复
应该在类销毁前,先清空对象dc_1
白云飘飘飘 2010-04-12
  • 打赏
  • 举报
回复
程序中并没有显式去释放它,此情况VB会自动释放它吗?
这个你不用担心,编译器会自动生成代码去销毁这些对象的,并且销毁的时机是发生在Class_terminate() 之后的
thllv 2010-04-12
  • 打赏
  • 举报
回复
我这里的dc_1是作为类的公共变量定义的,作为类实例和外部交换数据用(没有采用Public Property Set 的定义范式)
Public dc_1 As Object
在“Private Sub Class_initialize()”里
Set dc_1 = CreateObject("Scripting.Dictionary")


程序中并没有显式去释放它,此情况VB会自动释放它吗?

bcrun 2010-04-12
  • 打赏
  • 举报
回复
“有的大侠说VB就根本不存在内存泄露,哪位大侠能否再分析下?”
你要看他是在什么语境下讲的,像你这种dc_1如是定义在函数内部的,那超出函数外就会自动set ...nothing的
Set dc_1 = CreateObject("Scripting.Dictionary")
thllv 2010-04-12
  • 打赏
  • 举报
回复
噢,估计和这个有点关系。
具体情况是:
程序中只有一个地方把这个类实例化(在另外一个窗体中)
在窗体关闭时“Set m_窗体 = Nothing”,引用应该只有一个
但是在这个类中又动态生成了其它对象如:“Set dc_1 = CreateObject("Scripting.Dictionary")”
这些对象并没有释放,是不是这个原因导致的?

本来想在Class_terminate() 这个销毁函数中去销毁类自己定义的对象,但他根本没有被调用?
程序运行也正常,没有报如何错误!
我担心如果就这样不管它是否会造成内存泄露的问题?
有的大侠说VB就根本不存在内存泄露,哪位大侠能否再分析下?
白云飘飘飘 2010-04-12
  • 打赏
  • 举报
回复
set object=nothing 先对对象的引用计数减一,如果引用计数为0时才销毁对象。估计是别的地方还有对对象的引用
贝隆 2010-04-12
  • 打赏
  • 举报
回复
关注。。。。。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧