一个类的四个基本函数(构造函数,拷贝构造函数,析构函数,拷贝赋值函数)

    xiaoxiao2023-11-03  182

    #include<cstring> #include<cstdio> class CMyString { public: CMyString(char* pData = nullptr); //构造函数 CMyString(const CMyString& str); //拷贝构造函数 ~CMyString(void); //析构函数 CMyString& operator = (const CMyString& str); //拷贝赋值运算符 private: char* m_pData; }; CMyString::CMyString(char *pData) { if (pData == nullptr) { m_pData = new char[1]; m_pData[0] = '\0'; } else { int length = strlen(pData); m_pData = new char[length + 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() { delete[] m_pData; } CMyString& CMyString::operator=(const CMyString& str) { //参数为常量引用,传值的话会导致调用拷贝构造函数,复制一次值降低性能 if (&str == this) { //确保不是自己给自己赋值,不然后面会把自己和传过来的实例的内存释放掉 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; //返回一个引用而不是void是为了连续赋值 s1=s2=s3 }

     

    最新回复(0)