/////// File: Refstr.C /////// #include "Refstr.h" Refstr::Cell::Cell( char *s ) { str = new char[strlen(s)+ 1]; strcpy(str, s); cnt = 1; } int Refstr::cmp(const Refstr& s) const { if ( s.ptr == ptr ) return(0); else return(strcmp(ptr->str, s.ptr->str)); } void Refstr::display() { cout << ptr->str << "\n"; } Refstr::~Refstr() { cout << "~Refstr " << ptr->str << " cnt=" << ptr->cnt << "\n"; if ( --ptr->cnt == 0 ) delete ptr; // invokes ~Cell automatically } Refstr::Refstr(char *s) { ptr = new Cell(s); } Refstr& Refstr::OP = (const Refstr& s) { if (this == &s || ptr == s.ptr ) return(*this); cout << ptr->str << " = " << s.ptr->str<< "\n"; if ( --ptr->cnt == 0 ) delete ptr; ptr = s.ptr; ptr->cnt++; return(*this); } // copy constructor Refstr::Refstr(const Refstr& s) { ptr = s.ptr; ptr->cnt++; }