Re: [dws-developer] Destructor
Brought to you by:
hhernler,
mackermann
From: Mark <mnm...@co...> - 2004-01-15 05:03:03
|
Andreas Luleich wrote: > Hi Mark, > > I played a bit with the TStringList wrapper implementation and found > something to tell you. > > First there is no destructor defined and implemented for any(?) of your > implementation. So the (single line) script > > <SCRIPT> > TStringList.Create; > </SCRIPT> This was intentional. I thought that declaring the destructor was wasted memory (extra symbols) because all you need to do is call .Free and TObject implements that. Was I wrong to do this? Does *every* class need a destructor or is an ancestor declared one okay? > Second I often create objects within unit functions: > > <UNIT> > function CreateStringList : TStringlist; > </UNIT> > > and call GetConstructor(..) in OnEval: > > <DELPHI> > type TMyStringList = class (TStringList); > > procedure TFDwsDemo.dws2Unit1FunctionsCreateStringListEval( > Info: TProgramInfo); > begi > Info.Result := Info.Vars['TStringList'].GetConstructor( > 'Create',TMyStringList.Create).Call.Value; > end; > </DELPHI> Hmm. I think this would work better: (haven't tried it... could be wrong) Info.Result := Info.RegisterExternalObject(TMyStringList.Create, True, False); The final param is ExactMatch. If False, it should go through the objects ancestry to find a match that DWS knows about. This would end up as a TStringList. > Third I think that assertion questions like > > Assert((ExternalObject<>nil) and (ExternalObject is TStringList)); > > can be optimized to > > Assert(ExternalObject is TStringList); > > Am I right? > > OK, time to go to bed ..., ALu. No. I had to double check to make sure. Here is some Delphi code to try out. var sl: TStringList; someObject: TObject; begin sl := nil; someObject := sl; if someObject is TStringList then showMessage('I''m a TStringList'); end; Using D5, the message does not show. Thanks again for the help. I'll have to test it at work tomorrow. :) Assume it works, if not I'll come yelling. ;) -Mark E. |