180                                    .    

~str_obj() { delete []s; }
'^ 

 str_obj  ,   my_string.  
,            
friend (.  7.3,  ,  . 195).  -
,   str_obj       
,   .   str_obj 
re?_cnt  .

class my_string {
public:

my_string() { st = new str_obj; assert(st i= 0);}

my_string(const char* p)

{ st = new str_obj(p); assert(st i= 0);}

my_string(const my_string& str)

{ st = str.st; st -> ref_cnt++; }

~my_string() ;

void assign(const my_string& str);

void print() const { cout  st -> s; }
private:

str_obj* st;

};

     my_string.    
 s t    s t r_obj.     -
     ,        .
  assign ()    -
  :

void my_string::assign(const my_string& str)
{

if (str.st i= st) {

if (--st -> ref_cnt == 0)
delete st;

st = str.st;

st -> ref_cnt++;

}

}

 ,  my_string     .
         -
.       str_obj. 
,     ,     .

      . 
         .

       
.  ,        -
 .        -
 .