题目:类CMyString 的声明如下:
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
private:
char* m_pData;
};
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对
象的状态不能改变。
/*
55. 题目:类CMyString 的声明如下:
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
private:
char* m_pData;
};
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对
象的状态不能改变。
*/
class CMyString
{
public:
CMyString(char* pData = NULL)
{
if(pData==NULL)
{
m_pData=new char[1];
m_pData[0]='\0';
}
else
{
int len=strlen(pData);
m_pData=new char[len+1];
strcpy(m_pData,pData);
}
}
CMyString(const CMyString& str)
{
int len=strlen(str.m_pData);
m_pData=new char[len+1];
strcpy(m_pData,str.m_pData);
}
~CMyString(void)
{
delete[] m_pData;
}
CMyString& operator = (const CMyString& str)
{
if(this==&str)
return *this;
delete[] m_pData;
int len=strlen(str.m_pData);
m_pData=new char[len+1];//分配空间的时候就可能失败。如果失败了,下面的就不应该继续,而且分配了的内存也应该释放。
strcpy(m_pData,str.m_pData);
return *this;
//这里的实现并不是异常安全的。
}
private:
char* m_pData;
};