今天在剑指Offer里面看到的面试题,如何重写操作符=
我一开始的思路是直接把这个类赋值过去不就行了吗,才发现自己想的太天真了....
首先应该考虑特殊情况,如果赋值的是null怎么办?怎么实现连续赋值?赋值后是否释放了实例的内存?....
不得不说自己考虑的太浅了,以后解决问题应该先考虑特殊情况和边界条件
正确思路(考虑到内存不足的情况):
CMyString& CMyString::operator(const CMyString &str){
if(this!=&str){
CMyString strTmep(str);
char* pTmep=strTemp.m_pData;
strTemp.m_pData=m_Data;
m_Data=pTemp;
}
return *this;
}
未考虑内存不足的情况()
CMyString&CMyString::operator=(constCMyString&str)
{if(this==&str)
{return*this;}
delete[]m_pData;
m_pData=nullptr;
m_pData=newchar[strlen(str.m_pData)+1];
strcpy(m_pData,str.m_pData);
return*this;}
网友评论