Re: [dws-developer] Destructor
Brought to you by:
hhernler,
mackermann
From: Andreas L. <alu...@we...> - 2004-01-15 23:49:34
|
Mark wrote: >> 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. > "sl is TStringList" also results to "False". First check of the "is"-operator is the test "pointer=nil?" (see CPU Window). So I think there is no need for the nil check. > Hmm. I think this would work better: (haven't tried it... could be wrong) > > Info.Result := Info.RegisterExternalObject(TMyStringList.Create, True, > False); > Yes, this may work. But I (as user) would NEVER understand, why NO constructor is called, when creating a new object. That's why I am not a fan of "your" RegisterExternalObject function (Sorry). A similar question is unanswered in the forum (2003/12/21 "Why doesn't the constructor get called?"). I do not have a convincing answer ... :( > 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? I like the idea to reintroduce the Free-Method (copy-paste of Delphi code ;) ). If no one of the developers raises an objection ... I can start a try (hello Matthias?). But for your problem: Sometimes I take quasi-fix objects as ExternalObjects (the current form, a button, ttable, tgrid, etc.) Such an object must not freed at destruction of the IScriptObj. So a general destruction of the ExternalObject in "TObject.Destroy" (DWS) I will not support. I would introduce a new flag in TScriptObj?! Regards, ALu. |