标签:c++
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
private:
char* m_pData;
};
解答:
/*把参数申明为引用可以避免调用复制构造函数,并且const引用使得在函数内不会改变引入实例的状态。此外,只有返回一个引用,才可以允
许连续赋值。*/
CMyString& CMyString::operator =(const CMyString &str)
{
if (this==&str)
/*判断传入的参数和当前的实例(*this)是不是同一个实例。如果是同一个,则不进行赋值操作,直接返回。如果事先不判断就进行赋值,那么在释放实例
自身的内存的时候就会导致严重的问题:当*this和传入的参数是同一个实例时,那么一但释放了自身的内存,传入的参数的内存也同时被释放了,因此再也找
不到需要赋值的内容。*/
return *this;
delete []m_pData;/*如果我们忘记在分配新内存之前释放自身已有的空间,程序将出现内存泄露。*/
m_pData=NULL;
m_pData=new char[strlen(str.m_pData)+1];
strcpy(m_pData,str.m_pData);
return *this;
}
标签:c++
原文地址:http://blog.csdn.net/lsh_2013/article/details/45177861