今天在劍指Offer里面看到的面試題轮锥,如何重寫操作符=
我一開始的思路是直接把這個類賦值過去不就行了嗎,才發(fā)現(xiàn)自己想的太天真了....
首先應(yīng)該考慮特殊情況,如果賦值的是null怎么辦?怎么實現(xiàn)連續(xù)賦值?賦值后是否釋放了實例的內(nèi)存?....
不得不說自己考慮的太淺了抄罕,以后解決問題應(yīng)該先考慮特殊情況和邊界條件
正確思路(考慮到內(nèi)存不足的情況):
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;
}
未考慮內(nèi)存不足的情況()
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;}