Lar*_*tig 3 delphi memory-management delphi-2010
我必须存储一些可以在Delphi中轻松实现的记录(五个简单的字段).但是,我不清楚当我这样做时会发生什么TList<TMyRecordType>.Add(R).
由于R是我创建my TList的过程中的局部变量,我假设函数返回时它的内存将被释放.这会在列表中留下无效的记录指针吗?或者列表是否知道要复制分配?如果是前者,我假设我必须使用New()和Dispose()手动管理R的内存,这是正确的吗?
或者,我可以通过简单地将字段声明为public(甚至没有使它们成为正式属性而烦恼)将我的记录类型"提升"为类类型.这是否可以,或者我应该花时间建立私人领域和公共财产的课程?
Bar*_*lly 10
简化:记录是数据的blob,默认情况下通过值传递 - 即通过复制它们.TList<T>将值存储在类型为T的数组中.因此,TList<TMyRecordType>.Add(R)将值复制R到位置的数组中Count,并将其递增Count1.无需担心内存的分配或释放.
您通常不需要担心的更复杂的问题:如果您的记录包含字符串类型,接口类型,动态数组或记录本身包含其中一种类型的字段的字段,那么它不仅仅是一个简单地复制数据; 相反,使用来自System.pas的CopyRecord,这可确保正确更新引用计数.但通常你不需要担心这个细节,除非你Move用来改变自己的位置,或做类似的低级操作.