当使用类引用来调用构造函数时,若执行过程中发生了异常,则自动调用析构函数整的对象。
当使用对象引用来调用构造函数时(而不是使用类引用),数作用在指定的对象上,它只是执行构造函数中的命令语句,然后返回一个对象的引用(是怎样的对象引用,和调用它的一样吗?)。使用对象引用来调用构造函数时,通常和关键字用一个继承的构造函数。
下面是一个类和构造函数的例子。 type
T1.Test
0,把nilRTTI信息要求每一个公布Overloading Create。 Destroy来销毁不完取而代之的是,构造函inherited一起使用来调- 105 -
赋给所有的指针和类类型的字段,它不是创建一个对象;
Classes and objects
TShape = class(TGraphicControl)
private
FPen: TPen;
FBrush: TBrush;
procedure PenChanged(Sender: TObject);
procedure BrushChanged(Sender: TObject);
public
constructor Create(Owner: TComponent); override;
destructor Destroy; override;
...
end;
constructor TShape.Create(Owner: TComponent);
begin
inherited Create(Owner); // 初始化继承下来的部分
Width := 65;// 改变继承下来的属性
Height := 65;
FPen := TPen.Create; // 初始化新字段
FPen.OnChange := PenChanged;
FBrush := TBrush.Create;
FBrush.OnChange := BrushChanged;
end;
构造函数的第一步,通常是调用继承下来的构造函数,对继承的字段进行初始化;然后对派生类中新引入的字段进行初始化。因为构造函数总是把为新对象分配的内存进行“清零”
有字段开始时都是0(有序类型)、nil(指针和类)、空(字符串)或者
除非字段的值不为0或者空值,我们没必要在构造函数中初始化各字段。
当使用类标志符调用构造函数时,声明为虚方法的构造函数和声明为静态时是相同的。但是,当和类引用(class-reference)结合使用时,虚构造函数允许使用多态,也就是说,在编译时,对象的类型是未知的(参考Class references)。
Destructors(析构函数)
析构函数是一个特殊的方法,用来销毁调用的对象并且释放它的内存。声明一个析构函数就像声明一个过程,但以destructor开头。比如:
destructor Destroy;
destructor Destroy; override;
析构函数必须使用默认的register调用约定。虽然一个类的析构函数可以不止一个,但推荐每个类覆盖继承下来的Destroy方法,并不再声明其它析构函数。
要调用析构函数,必须使用一个实例对象的引用。比如,
MyObject.Destroy;
当析构函数被调用时,它里面的命令首先被执行,通常,这包括销毁所有的嵌入对象以及释放为对象分配的资源;接下来,为对象分配的内存被清除。
下面是一个析构函数实现的例子:
destructor TShape.Destroy;
begin
FBrush.Free;
FPen.Free;
- 106 - (clear)Unassigned(变体类型) ,所以,对象的所。所以,
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-77.html
烊烊