SP<T>& reset () { if(reference->Release() == 0) { delete pData; delete reference; } }
~SP() { // if reference become zero delete the data if(reference->Release() == 0) { delete pData; delete reference; } }
~SP() { // Destructor // Decrement the reference count // if reference become zero delete the data if(reference->Release() == 0) { delete pData; delete reference; } }
SP<T>& operator = (const SP<T>& sp) { // Assignment operator if (this != &sp) // Avoid self assignment { // Decrement the old reference count // if reference become zero delete the old data if(reference->Release() == 0) { delete pData; delete reference; } // Copy the data and reference pointer // and increment the reference count pData = sp.pData; reference = sp.reference; reference->AddRef(); } return *this; }