码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】赋值运算符函数

时间:2015-04-22 00:43:45      阅读:198      评论:0      收藏:0      [点我收藏+]

标签: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;
}


【剑指offer】赋值运算符函数

标签:c++

原文地址:http://blog.csdn.net/lsh_2013/article/details/45177861

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!