请教关于内存释放问题,如何处理重载>>是释放空间错误(代码如下)
class Mystring{
public:
Mystring(const char *str=NULL);
Mystring(const Mystring &);
~Mystring();
Mystring operator=(const Mystring &);
friend Mystring operator+(Mystring &,Mystring &);
friend ostream &operator<<(ostream&, Mystring &);
friend istream &operator>>(istream&, Mystring &);
private:
char *m_data;
};
Mystring::Mystring(const char *str)
{
if(str==NULL)
{
delete m_data;
m_data=new char[1];
m_data='\0';
}
else
{
int len=0;
while(str[len]!='\0')
{
len++;
}
m_data=new char[len+1];
::memset(m_data,0,len+1);
for(int i=0; i<len;i++)
{
m_data[i]=str[i];
}
}
}
Mystring::Mystring(const Mystring &mystr)
{
int len=0;
while(mystr.m_data[len]!='\0')
{
len++;
}
m_data=new char[len+1];
::memset(m_data,0,len+1);
for(int i=0; i<len;i++)
{
m_data[i]=mystr.m_data[i];
}
}
Mystring::~Mystring
{
delete []m_data;
m_data=NULL;
}
Mystring Mystring::operator=(const Mystring &mystr)
{
int len=0;
while(mystr.m_data[len]!='\0')
{
len++;
}
m_data=new char[len+1];
::memset(m_data,0,len+1);
for(int i=0; i<len;i++)
{
m_data[i]=mystr.m_data[i];
}
return *this;
}
Mystring operator+(Mystring &mystr1,Mystring &mystr2)
{
int len1=0;
int len2=0;
while(mystr1.m_data[len1]!='\0')
{
len1++;
}
while(mystr2.m_data[len2]!='\0')
{
len2++;
}
char *str=new char[len1+len2+1];
::memset(str,0,len1+len2+1);
for(int i=0; i<len1+len2;i++)
{
if(i<len1)
{
str[i]=mystr1.m_data[i];
}
else
{
str[i]=mystr2.m_data[i-len1];
}
}
return Mystring(str);
}
ostream &operator<<(ostream &out, Mystring &mystr)
{
out<<mystr.m_data;
return out;
}
istream &operator>>(istream &in, Mystring &mystr)
{
in>>mystr.m_data;
return in;
}
重载>>后,调用析构函数时时会报错的,因为没有相应的堆区释放,请问各位大虾,如何避免这样的问题出现,析构函数自己写
ps:是Mystring创建对象mystring,cin>>mystring后,析构时报错
[ 本帖最后由 zxh_85 于 2010-8-29 12:22 编辑 ]