class AutoReference : public DataReference { public: AutoReference( void ); AutoReference( AutoReference &refToCopy ); AutoReference( OneTimeData *originalData ); virtual ~AutoReference( void ); AutoReference& operator= ( AutoReference& rhs ); unsigned int GetReferenceCount( void ); void CountInc(); private: unsigned int count; }; #include "AutoReference.h" // YOUR IMPLEMENTATION FOR YOUR AutoReference CLASS // GOES HERE. AutoReference::AutoReference( void ) { DataReference(); count = 0; } AutoReference::AutoReference( AutoReference &refToCopy ) { SetData( refToCopy.GetData() ); count++; //refToCopy.CountInc(); } AutoReference::AutoReference( OneTimeData *originalData ) { SetData( originalData ); count = 1; } AutoReference::~AutoReference( void ) { if (count == 1) { DestroyData(); } else { count--; } } AutoReference& AutoReference::operator= (AutoReference& rhs) { SetData ( rhs.GetData() ); //rhs.CountInc(); count++; return *this; } unsigned int AutoReference::GetReferenceCount( void ) { return count; } void AutoReference::CountInc( void ) { count++; }