Assign复制对象与对象复制到变量不同,Assign会复制对象的所有数据.
而一个对象复制给一个变量时,只是当前实例的指针指向另一个对象.
所以Assign复制后一个对象释放后,不会影响另一个.
而一个对象复制给一个变量时,只是当前实例的指针指向另一个对象.
所以Assign复制后一个对象释放后,不会影响另一个.
解决方案 »
- 串口通讯问题,请大家帮忙看看。
- 我要疯掉了!为什么SimpleDataSet老是失去链接
- 如何去掉cxgrid中被选中的记录的背景颜色?请各位高手请点一下小弟!谢谢!!!
- DBGrid怎么赋值
- 请问打开一个模式窗口如何让它在关闭时能返回一个值到主窗口?
- 各位,看看下面这段段码,从一个文件流中释放多个文件(一个执行文件+多张图片)的代码,执行文件和第一张图版能正确释放出,另一些图版
- 求TDBChart控件的用法?(用代码来控制)
- 怎么保存数据库中的BLOB Binary数据到一个文件?
- 请问Zlib单元怎么用,谢谢!!!!
- 如何写回车就可以默认确定组件被击中的代码/
- 我的一个应用,调用了一个自己写的dll,发现在每调用一次,系统资源就减少差不多1%,大约一百次以后,系统出现错误,什么原因,请帮帮忙?
- 天大好消息(API Hook)!
我说的是一个Windows对象,比如一个TCanvas对象Assign到另一个TCanvas对象,这时它们引用的应该是同一个DC句柄吧,那么其中一个TCanvas释放时,它引用的DC句柄是不是也释放了,如果是这样,那另一个TCanvas的Handle是不是引用就无效了?
变量复制是引用指针
assign是内存复制 一个释放并不会影响另一个
除了A n s i S t r i n g 以外,D e l p h i 还提供了其他几种生存期自管理类型,这些类型包括:
Wi d e S t r i n g 、Va r i a n t 、O l e Va r i a n t 、i n t e r f a c e 、d i s p i n t e r f a c e 和动态数组,这些类型在本章稍后有
介绍,现在,我们重点讨论究竟什么是生存期自管理,以及它们是如何工作的。
生存期自管理类型,又被称为自动回收类型,是指那些在被使用时就占用一定的特殊资
源,而在它离开作用域时自动释放资源的类型。当然不同的类型使用不同的资源,例如,
A n s i S t r i n g 类型在被使用时就为字符串占用内存,当它超出作用域时就释放被字符串占用的内
存。
对于全局变量,这种情况是相当直观的:作为应用程序结束代码的一部分,编译器自动
插入代码来清除每一个生存期自管理类型的全局变量。因为在应用程序在被装入时,全局变量
都被初始化为0 ,每一个全局变量将用初始化时的0 、空或其他值来指示它还没有被使用,基于
这种方法,终止代码只清除那些确实在应用程序中被使用的全局变量。
对于局部变量来讲,这种情况稍微有的复杂:首先,在过程或函数开始运行时,编译器
插入的代码保证初始化这些局部变量,接着,编译器产生一个t r y. . . f i n a l l y 的异常处理块,它包容整个函数体,最后,编译器在f i n a l l y 块插入代码来清除生存期自管理变量(异常处理块在2 . 1 9
节“结构化异常处理”中介绍),为了能记住这些,请看下面的代码:
procedure Foo;
v a r
S : s t r i n g ;
b e g i n
/ /过程体
/ /在这里用S
e n d ;
虽然这个过程看起来简单,如果考虑进由编译器插入的代码,它看起来像下面的代码:
procedure Foo;
v a r
S : s t r i n g ;
b e g i n
S:=' ';
t r y
/ /过程体
/ /在这里用S
f i n a l l y
/ /在这里清除S
e n d ;
e n d ;
不过TBitmap呢,它应该有引用一个HBitmap的Windows句柄吧,Assign另一个后,释放其中一个,它的HBitmap也就释放了吧,那剩下的那一个TBitmap的HBitmap不就引用无效了吗?