class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
private:
char* m_pData;
};
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对
象的状态不能改变。
#include<iostream>
#include<string>
using namespace std;
class CMyString{
public:
CMyString(char* pData=NULL);
~CMyString();
CMyString(const CMyString &str);
CMyString& operator=(const CMyString &str);
void print();
private:
char* m_pData;
};
CMyString::CMyString(char* pData)
{
if(pData==NULL)
{
m_pData=new char[1];
*m_pData=NULL;
}
else
{
int len=strlen(pData);
m_pData=new char[len+1];
strcpy(m_pData,pData);
}
}
CMyString::~CMyString()
{
}
CMyString::CMyString(const CMyString &str)
{
int len=strlen(str.m_pData);
m_pData=new char[len+1];
strcpy(m_pData,str.m_pData);
}
CMyString & CMyString::operator=(const CMyString &str)
{
if(this==&str)
{
return *this;
}
delete[]m_pData;
m_pData=NULL;
int len=strlen(str.m_pData);
m_pData=new char[len+1];
strcpy(m_pData,str.m_pData);
return *this;
}
void CMyString::print()
{
if(*m_pData!=NULL)
cout<<m_pData<<endl;
else
cout<<"NULL"<<endl;
}
int main()
{
CMyString str1("hello");
CMyString str2;
str1.print();
str2.print();
CMyString str3(str1);
str3.print();
CMyString str4;
str4=str1;
str4.print();
}