zhedahht / CodingInterviewChinese2

《剑指Offer:名企面试官精讲典型编程面试题》第二版源代码
Other
5.32k stars 2.17k forks source link

关于拷贝赋值运算符代码的异常安全问题 #2

Closed Analyse4 closed 5 years ago

Analyse4 commented 7 years ago

何老师,这段代码是不是有异常安全问题呀?

CMyString& CMyString::operator = (const CMyString& str)
   {
       if(this == &str)
       return *this;
    
       delete []m_pData;
       m_pData = nullptr;
    
       m_pData = new char[strlen(str.m_pData) + 1];
       strcpy(m_pData, str.m_pData);
    
       return *this;
   }
Richbabe commented 6 years ago

是的,如果你在delete掉m_pData后内存还是不够new那你的m_pData就会是一个空指针。