你的四个问题,可以归结为两个问题1.对象的拆构,
一个对象要拆构,只在以下情况下发生:
a.显式调用Destructor,或free或 destroy,
b.程序结束,系统自动释放。
对于一些创建时有宿主的对象,如Tform对象,并不需要显式的释放他,当它的宿主对
象被释放时,他也会被释放,但也有例外,看下例:
From1:=Tform.create(application);
(程序结束,是自动释放);
Form1:=Tform.create(nil);
(需要手工释放);
第一例form1的宿主是application,当程序结束时,application会调用它的destroy方法,每一个可以作为宿主对象的对象都有一个对象列表属性,它的destroy方法
逐一调用它的对象列表中的对象的destroy方法,所以你的第四个问题中的 在拆构时调用iinherited很有必要的, 也是最安全的.忽略这些问题,会造成内存泄漏,使得程序每运行一次,系统资源减少一次,直到最后系统特别的慢,直到崩溃。
第二例form1的宿主为nil,也就是没有宿主,这样就需要自己来解决释放问题。
一般使用try finally end 结构。
2.对象的赋值与复制。
对象是一个指针,但他和指针不同, 在你的问题1 中o2:=o1 实际上就是对象的复制,这也是对象和指针不同的地方,在使用过程中尽量要避免这种情况的发生,对象的复制
有时会占用很大的内存,消耗系统资源。一般的要进行对象的复制都是调用对象的assign()方法。你可以看一下assign方法实现的原码。
看了以上的介绍,我向你应该自己能够对你的问题有个答案。如果还不明白,我可以下次在给你说明白点。
一个对象要拆构,只在以下情况下发生:
a.显式调用Destructor,或free或 destroy,
b.程序结束,系统自动释放。
对于一些创建时有宿主的对象,如Tform对象,并不需要显式的释放他,当它的宿主对
象被释放时,他也会被释放,但也有例外,看下例:
From1:=Tform.create(application);
(程序结束,是自动释放);
Form1:=Tform.create(nil);
(需要手工释放);
第一例form1的宿主是application,当程序结束时,application会调用它的destroy方法,每一个可以作为宿主对象的对象都有一个对象列表属性,它的destroy方法
逐一调用它的对象列表中的对象的destroy方法,所以你的第四个问题中的 在拆构时调用iinherited很有必要的, 也是最安全的.忽略这些问题,会造成内存泄漏,使得程序每运行一次,系统资源减少一次,直到最后系统特别的慢,直到崩溃。
第二例form1的宿主为nil,也就是没有宿主,这样就需要自己来解决释放问题。
一般使用try finally end 结构。
2.对象的赋值与复制。
对象是一个指针,但他和指针不同, 在你的问题1 中o2:=o1 实际上就是对象的复制,这也是对象和指针不同的地方,在使用过程中尽量要避免这种情况的发生,对象的复制
有时会占用很大的内存,消耗系统资源。一般的要进行对象的复制都是调用对象的assign()方法。你可以看一下assign方法实现的原码。
看了以上的介绍,我向你应该自己能够对你的问题有个答案。如果还不明白,我可以下次在给你说明白点。
解决方案 »
- 救救我的工作吧!!!
- 怎么把资源(如图片)直接编译到exe中?最好有例子程序!
- 一个简单的关于多文档MDI窗体的问题,在线等!!!马上给分
- 再线求教!!图形处理时 bitmapinfo 的信息怎么获取
- 局域网聊天的程序的一些问题.各位帮帮忙。
- 请大虾们告诉小弟怎样把Access建的库中表的数据导出并保存为.txt格式,怎样导入.txt中的数据进库中的表,我用的是DBGrid控件。最好赋上源
- 尝试写个Delphi的简单小框架,欢迎大家多提意见!
- delphi中如何使用 14px 字体?
- 又一个C/S方式下的编程问题,不明白呀?为什么呢?怎么做呢?
- 大家来谈谈,delphi的网络与通信部分主要学些什么
- 有问题请教
- 我是一初学者,怎样释放某单元的占用的内存空间?望大侠指教
2, 一般有 assign 方法.
3, 应该不会.
4, 不一定非得自己写 ceate, 如果你的类里没有要创建的东西, 就不用
应该是的.