ВУЗ:
Составители:
Рубрика:
string::~string() /*-деструктор класса для всех вариантов */
/*-конструирования объектов; */
{ if(--p->n==0)/*-когда была одна ссылка: */
{ delete p->s;/*-удаление поля данных; */
delete p;/*-удаление пары s и n; */
}
} /*-конец определения деструктора string;*/
Заметим,что здесь p->s может быть равен нулю,тогда опера-
цией delete ничего не удаляется,что как раз и необходимо для
пустого объекта.
string& string::operator=(char*s)/*-присваивается строка */
/* символов; */
{ if(p->n>1)/*-на объект ссылаются другие объекты;*/
{ p->n--; /*-снятие с учета данного объекта*/
p=new srep;/*-конструирование объекта зано- */
} /* во; */
else /*-на объект других ссылок нет,кроме своей;*/
if(p->n==1)/*-своя единственная ссылка: */
delete p->s;/*-удаление старого поля данных;*/
p->s=new char[strlen(s)+1];/*-новое поле данных */
strcpy(p->s,s);/*-копирование правой части; */
p->n=1;/*-ссылка самого объекта на поле данных; */
return *this;/*-возврат ссылки на объект слева; */
} /*-конец присваивания объекту строки символов; */
string& string::operator=(string& x)/*-присваивание одно- */
/* го объекта другому */
{ x,p->n++;/*-учет новой ссылки в объекте справа; */
if(--p->n==0)/*-уменьшение счетчика ссылок слева*/
{ delete p->s;/*-удаление строки данных и уда-*/
delete p;/* ление объекта слева,если ссылок */
/* на строку больше нет; */
}
p=x.p;/*-объект слева ссылается на объект спра-*/
/* ва; */
return *this;/*-возврат ссылки на объект слева;*/
} /*-конец присваивания объекту другого объекта; */
34
string::~string() /*-деструктор класса для всех вариантов */ /*-конструирования объектов; */ { if(--p->n==0)/*-когда была одна ссылка: */ { delete p->s;/*-удаление поля данных; */ delete p;/*-удаление пары s и n; */ } } /*-конец определения деструктора string;*/ Заметим,что здесь p->s может быть равен нулю,тогда опера- цией delete ничего не удаляется,что как раз и необходимо для пустого объекта. string& string::operator=(char*s)/*-присваивается строка */ /* символов; */ { if(p->n>1)/*-на объект ссылаются другие объекты;*/ { p->n--; /*-снятие с учета данного объекта*/ p=new srep;/*-конструирование объекта зано- */ } /* во; */ else /*-на объект других ссылок нет,кроме своей;*/ if(p->n==1)/*-своя единственная ссылка: */ delete p->s;/*-удаление старого поля данных;*/ p->s=new char[strlen(s)+1];/*-новое поле данных */ strcpy(p->s,s);/*-копирование правой части; */ p->n=1;/*-ссылка самого объекта на поле данных; */ return *this;/*-возврат ссылки на объект слева; */ } /*-конец присваивания объекту строки символов; */ string& string::operator=(string& x)/*-присваивание одно- */ /* го объекта другому */ { x,p->n++;/*-учет новой ссылки в объекте справа; */ if(--p->n==0)/*-уменьшение счетчика ссылок слева*/ { delete p->s;/*-удаление строки данных и уда-*/ delete p;/* ление объекта слева,если ссылок */ /* на строку больше нет; */ } p=x.p;/*-объект слева ссылается на объект спра-*/ /* ва; */ return *this;/*-возврат ссылки на объект слева;*/ } /*-конец присваивания объекту другого объекта; */ 34
Страницы
- « первая
- ‹ предыдущая
- …
- 32
- 33
- 34
- 35
- 36
- …
- следующая ›
- последняя »