точнее сделал не совсем так, как amirul..
добавил конструктор:
DSTR::DSTR(const DSTR &ds) {
int len = ln(ds.dstr);
if (dstr = new char[len+1])
copy(dstr,ds.dstr,len);
else
exit(1);
} ---
и переделал operator+:
DSTR DSTR::operator+(char *st) {
int len = ln(st);
DSTR retval;
char *tmp;
if (!len) return this->dstr;
if (dstr == NULL) {
tmp = new char[len+1];
copy(dstr,st,len);
retval = DSTR(tmp);
delete [] tmp;
return retval;
}
int len1 = ln(dstr);
tmp = new char [len+len1+1];
copy(tmp,dstr,len1);
copy(tmp+len1,st,len);
retval = DSTR(tmp);
delete [] tmp;
return retval;
} ---
явных утечек памяти не замечается, если что-нибудь обнаружится буду править по мере сил.
|