面试题1:赋值运算符函数

来源:互联网 发布:良品铺子手撕面包 知乎 编辑:程序博客网 时间:2024/06/11 01:44
<strong>经典的初级解法:</strong>
#include<iostream>using namespace std;class cMyString {private:char * m_pData;public:cMyString(const char * pData) {if(pData == NULL) {m_pData = new char[strlen(pData) + 1];m_pData[0] = '\0';}else {m_pData = new char[strlen(pData) + 1];strcpy(m_pData, pData);}}cMyString::cMyString(const cMyString &str){int length = strlen(str.m_pData);m_pData = new char[length + 1];strcpy(m_pData, str.m_pData);}cMyString& cMyString::operator = (const cMyString &str) {if(this == &str) {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;}cMyString(void) {if(m_pData != NULL) {delete[] m_pData;}}void cMyString::print() {printf("%s\n", m_pData);}};int main() {cMyString S1("");cMyString S3("sssss");cMyString S2(S3);cMyString S4 = S1;S1.print();S2.print();S3.print();S4.print();return 0;}


考虑异常安全性的解法:

       在上述方法中, 我们先delete掉了m_pData中的内容, 如果此时内存不足以new出要求长度的m_pData时抛出异常, m_pData将是一个空指针, 很容易导致程序崩溃。

cMyString& cMyString::operator = (const cMyString &str) {if(this != &str) {cMyString strTemp(str);char* pTemp = strTemp.m_pData;  //swap(m_pData, pTemp);strTemp.m_pData = m_pData;m_pData = pTemp;}return *this;}

0 0
原创粉丝点击