Thread overview | ||||||
---|---|---|---|---|---|---|
|
August 06, 2008 Is it possible to set this on null? | ||||
---|---|---|---|---|
| ||||
class CFoo{ public void destroy(){ delete this; } // ok public void forget(){ this = null; } // ok but no effect } void main(){ auto l_fooA = new CFoo; auto l_fooB = l_fooA; l_fooA.forget; // no effect l_fooA = null; // now ok l_fooB.destroy; // ok } |
August 06, 2008 Re: Is it possible to set this on null? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Zarathustra | Reply to Zarathustra, > class CFoo{ > public void destroy(){ delete this; } // ok > public void forget(){ this = null; } // ok but no effect > } that doesn't work because this is a hidden arg to the function, you can change its value but as with any other local value that doesn't effect the value used to call the function. > void > main(){ > auto l_fooA = new CFoo; > auto l_fooB = l_fooA; > l_fooA.forget; // no effect > l_fooA = null; // now ok > l_fooB.destroy; // ok } > |
August 06, 2008 Re: Is it possible to set this on null? | ||||
---|---|---|---|---|
| ||||
Posted in reply to BCS | On Wed, 06 Aug 2008 22:05:48 +0400, BCS <ao@pathlink.com> wrote: > Reply to Zarathustra, > >> class CFoo{ >> public void destroy(){ delete this; } // ok >> public void forget(){ this = null; } // ok but no effect >> } In fact, this should be disallowed (and it is in c++). > > that doesn't work because this is a hidden arg to the function, you can change its value but as with any other local value that doesn't effect the value used to call the function. > >> void >> main(){ >> auto l_fooA = new CFoo; >> auto l_fooB = l_fooA; >> l_fooA.forget; // no effect >> l_fooA = null; // now ok >> l_fooB.destroy; // ok } >> > |
August 06, 2008 Re: Is it possible to set this on null? | ||||
---|---|---|---|---|
| ||||
Posted in reply to BCS | BCS Wrote:
> Reply to Zarathustra,
>
> > class CFoo{
> > public void destroy(){ delete this; } // ok
> > public void forget(){ this = null; } // ok but no effect
> > }
>
> that doesn't work because this is a hidden arg to the function, you can change its value but as with any other local value that doesn't effect the value used to call the function.
>
> > void
> > main(){
> > auto l_fooA = new CFoo;
> > auto l_fooB = l_fooA;
> > l_fooA.forget; // no effect
> > l_fooA = null; // now ok
> > l_fooB.destroy; // ok }
> >
>
>
Reply to BCS,
Ok thanks for explain it. All regards!
|
Copyright © 1999-2021 by the D Language Foundation