社区
VB基础类
帖子详情
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
打赏
收藏
vb类的销毁函数何时被调用?
我是在access的vba里定义了一个类模块,初始化及调用都正常 Private Sub Class_initialize()的调用是正常的 最后 “Set m_窗体 = Nothing ” ‘m_窗体 是类的实例 Private Sub Class_terminate() 这个销毁函数并没有被调用?什么原因啊? 哪位大侠指点下在纯vb下是怎样的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
关注。。。。。
vb
.net基本入门学习资料
1.
vb
.net对象的建立和
销毁
:对象的生命周期 2.设置和重设
vb
.net的属性 3.用方法来表现动作 4.
vb
.net对象变量的声明 5.对一个对象进行多种操作 6.使用New关键字 7.如何释放对对象的引用 8.如何把对象传递到一个过程 ...
vb
.net基本入门学习资料.doc
1.
vb
.net对象的建立和
销毁
:对象的生命周期 2.设置和重设
vb
.net的属性 3.用方法来表现动作 4.
vb
.net对象变量的声明 5.对一个对象进行多种操作 6.使用New关键字 7.如何释放对对象的引用 8.如何把对象传递到一个过程 ...
计算机二级(
VB
)
计算机二级(
VB
)教程,全面、系统、细致地介绍了计算机二级(
VB
)的相关知识点。 课程能够帮助学习者快速入门。 该课程面向对象: 备考计算机二级(
VB
)的课程 备课期末考试 自学
VB
程序设计 课程注意提高学习者实战...
VB
6增强搜索插件 4.13.0.130
4.13.0.130¶ 修改过滤器的默认配置,去掉了 encoding="gb2312" 4.13.0.129¶ 补充翻译了一条漏掉的快捷菜单项...
类
后需要调整的相关
调用
代码 对于Task对象的事件源更新操作都放在TabManager?
类
的TabChange?事件中
VB
增强搜索插件 4.7.0.120
这次的更新内容比较多. ...修改无页面时未禁用关闭按钮的问题 修改
vb
alTabControl,在用BarEnabled?...
类
后需要调整的相关
调用
代码 对于Task对象的事件源更新操作都放在TabManager?
类
的TabChange?事件中
VB基础类
7,762
社区成员
197,608
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章