[fpc-pascal] Object constructor
Frederic Da Vitoria
davitofrg at gmail.com
Tue Sep 17 10:17:39 CEST 2013
2013/9/17 Xiangrong Fang <xrfang at gmail.com>
> My question is, since the programmer is responsible for explicitly call
>>> object constructors, then why do we need constructors at all? In another
>>> word, what's the difference
>>> between an object constructor and an object method?
>>>
>>
>> Using the constructor tells the compiler that it should allocate memory
>> on the heap for a new instance,
>> and return a method to this new memory. There is then an implicit return
>> value for the constructor, and this is stored in the variable to which you
>> assign the result of the constructor.
>>
>
> Well, could you please explain what's the difference between p1 and p2 in
> the program below:
>
> 1 program test;
> 2 type
> 3 TObj = object
> 4 public
> 5 Value: Integer;
> 6 procedure SetValue(AValue: Integer);
> 7 constructor Init(AValue: Integer);
> 8 end;
> 9
> 10 procedure TObj.SetValue(AValue: Integer);
> 11 begin
> 12 Value := AValue;
> 13 end;
> 14
> 15 constructor TObj.Init(AValue: Integer);
> 16 begin
> 17 Value := AValue;
> 18 end;
> 19
> 20 var
> 21 p1, p2 : ^TObj;
> 22 begin
> 23 New(p1);
> 24 p1^.SetValue(1);
> 25 WriteLn(p1^.Value);
> 26 New(p2, Init(2));
> 27 WriteLn(p2^.Value);
> 28 end.
>
(Thanks to Michael for spotting that you are using TP objects)
A little bit below the citation in your first post, you'll find this: "A
constructor/destructor pair is required if the object uses virtual methods.
The reason is that for an object with virtual methods, some internal
housekeeping must be done: this housekeeping is done by the constructor"
:-) In Turbo Pascal, it seems that some VMT housekeeping was also done in
the destructor, I don't know if this is still true in fpc.
--
Frederic Da Vitoria
(davitof)
Membre de l'April - « promouvoir et défendre le logiciel libre » -
http://www.april.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130917/637bcb9d/attachment.html>
More information about the fpc-pascal
mailing list