[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