www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Is it possible to set this on null?

reply Zarathustra <adam.chrapkowski gmail.com> writes:
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 
}
Aug 06 2008
next sibling parent reply BCS <ao pathlink.com> writes:
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 }
 

Aug 06 2008
parent Zarathustra <adam.chrapkowski gmail.com> writes:
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 }
 


Ok thanks for explain it. All regards!
Aug 06 2008
prev sibling parent "Koroskin Denis" <2korden gmail.com> writes:
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 }


Aug 06 2008