- Mastering Delphi Programming:A Complete Reference Guide
- Primo? Gabrijel?i?
- 290字
- 2021-06-24 12:33:36
Classes
While classes look superficially similar to records, they are in fact implemented in a completely different manner.
When you create an object of a class by calling the constructor for that class, the code allocates memory from the memory manager and fills it with zeroes. That, in effect, initializes all fields, managed and unmanaged, to default values. A pointer to this memory is stored in the variable which receives the result of a constructor.
When an object is destroyed, its memory is returned to the system (again, through the memory manager).
The rest of this section applies only to standard compilers (Window 32- and 64-bit and OS/X). If you are using an ARC-enabled compiler (Android, iOS, and Linux) then classes behave the same as interfaces. See the next section for more details.
Copying one variable of a class type to another just copies the pointer. In effect, you then have two variables pointing to the same object. There is no reference counting associating with objects and if you now destroy one variable (by calling the Free method), the other will still point to the same part of memory. Actually, both variables will point to that unused memory and if it gets allocated later (and it will), both variables will point to memory belonging to another object:
var
o1, o2: TObject;
begin
o1 := TObject.Create;
o2 := o1;
// o1 and o2 now point to the same object
o1.Free;
// o1 and o2 now point to unowned memory
o1 := nil;
// o2 still points to unowned memory
end;
If you have a long-living variable or field containing an object of some class and you destroy the object, make sure that you also set the value/field to nil.
- 計算機組裝·維護與故障排除
- 施耐德SoMachine控制器應(yīng)用及編程指南
- VCD、DVD原理與維修
- 基于Apache Kylin構(gòu)建大數(shù)據(jù)分析平臺
- Practical Machine Learning with R
- Spring Cloud微服務(wù)架構(gòu)實戰(zhàn)
- 筆記本電腦應(yīng)用技巧
- Arduino BLINK Blueprints
- 基于Proteus仿真的51單片機應(yīng)用
- 單片機原理及應(yīng)用
- The Machine Learning Workshop
- ARM接口編程
- ActionScript Graphing Cookbook
- The Deep Learning Workshop
- 計算機組裝與維護項目化教程(第二版)