Section 4.2. Traditional Memory De-allocation Schemas


4.2. Traditional Memory De-allocation Schemas

De-allocation of memory and the destruction of objects are also different in .NET, as compared with raw C++ or COM. In C++, the object destructor is called when a stack-based object goes out of scope:

     {//beginning of a C++ scope         MyClass object;         //use object;     }//end of scope, C++ calls the object destructor 

The object destructor is also called in C++ when the delete operator is used:

     //in C++:     MyClass* pObject = new MyClass;     //using pObject, then de-allocating it     delete pObject; 

COM uses reference counting, and it's up to the client to increment and decrement the counter associated with each object. Clients that share an object have to call AddRef( ) to increment the counter. New COM objects are created with a reference count of one. When a client is done with an object, it calls Release( ) to decrement the counter:

     //COM pseudo-code:     IMyInterface* pObject = NULL;     ::CoCreateInstance(CLSID_MyClass,IID_IMyInterface,&pObject);     //using pObject, then releasing it     pObject->Release(  ); 

When the reference count reaches zero, the object destroys itself:

     //COM implementation of IUnknown::Release(  )     ULONG MyClass::Release(  )     {        //m_Counter is this class counter        m_Counter--;        if(m_Counter == 0)        {           delete this;           return 0;        }        //Should return the counter:        return m_Counter;     } 



Programming. NET Components
Programming .NET Components, 2nd Edition
ISBN: 0596102070
EAN: 2147483647
Year: 2003
Pages: 145
Authors: Juval Lowy

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net