delphi窗体关闭时,如何循环释放自定义的对象,以防止内存泄漏
最近在写一个网管软件时遇到一个问题,就是在一个窗体的画布上有很多个节点(例如交换机、路由器、电脑),而这些节点的数量不是固定的,是需要在程序运行时,由用户自己手动添加的。...
最近在写一个网管软件时遇到一个问题,就是在一个窗体的画布上有很多个节点(例如交换机、路由器、电脑),而这些节点的数量不是固定的,是需要在程序运行时,由用户自己手动添加的。因此,为了简化程序,我定义了一个基类和几个子类,这些子类分别对应交换机、路由器和电脑等不同的设备类型,当用户在窗体的画布上添加一个交换机就创建一个对应的对象(其他设备也是这样实现)。现在的问题是,如何在这个窗体关闭时,循环析构这些自定义的对象,以防止内存泄漏。遍历窗体我也试过,并不能获取到这些对象。请大虾指点迷津。
其实就是想要实现描绘网络拓扑的功能 展开
其实就是想要实现描绘网络拓扑的功能 展开
2个回答
展开全部
Delphi的部件类(TComponent)的建立方法都有一个AOwner参数,该参数类型是TComponent,用来指明新建的对象的所有者。如果建立的对象是基于TComponent类(包括TComponent类的子类,如可视控件类)的,只要建立对象时AOwner参数不是nil,那么新建的对象就属于某个已存在的对象所有,这种情况是不需要写代码来释放对象的,当一个对象释放时,会自动把归属于它的所有附属对象全部释放。如果新建立的对象AOwner参数是nil,或对象的类方法中没有AOwner参数(如TStringList类),那也无法通过遍历窗体找到,只能自己建立相应的数据结构来记录,这样才能用遍历的方法来释放。
展开全部
你这些对象不应该属于窗体,而是创建出来后它的指针存在一个TList中,当用户删除节点时对应也删TList中那一条,当窗体关闭时,在Close事件中就可从TLIST中得到还存在的对象的指针全部释放掉。而窗体上是否显示东西是你是否想让它显示而已。希望能帮你。
有问题请到这里互相交流www.cx99res.com
有问题请到这里互相交流www.cx99res.com
追问
太感谢开心小书生和dodolon的精彩回答了,实在不知道该采纳谁的意见,就采纳开心小书生的吧,谢谢两位。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询