2013/9/17 Xiangrong Fang
Show quoted text 45 lines
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