/*
* 1.返回类型声明为该类型的引用才可以连续赋值;
* 2.传入的参数类型声明为该类型的常量引用,避免形参到实参的传递调用复制构造函数;
* 3.在分配内存之前先释放内存避免内存泄漏;
* 4.判断传入的参数和当前实例(*this)是否相同,如果相同则直接返回,否则释放内存操作作用于本身。
*/
#include <iostream>
#include <cstring>
#include <cstdio>
class CMyString
{
public:
CMyString(char* pData = nullptr); //构造函数
CMyString(const CMyString& str); //复制构造函数
~CMyString(void);
CMyString& operator = (const CMyString& str); //赋值运算符函数
public:
char* m_pData;
};
CMyString::CMyString(char *pData) {
if(pData == nullptr){
m_pData = new char[1];
m_pData[0] = '\0';
}
else{
m_pData = new char[strlen(pData) + 1];
strcpy(m_pData, pData);
}
}
CMyString::CMyString(const CMyString &str) {
m_pData = new char[strlen(str.m_pData) + 1];
strcpy(m_pData, str.m_pData);
}
CMyString::~CMyString() {
delete[] m_pData;
}
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;
}
int main(){
char* text = "Hello world";
CMyString str1(text);
CMyString str2;
str2 = str1;
printf("str2: %s", str2.m_pData);
return 0;
}
剑指offer_1_赋值运算符函数
猜你喜欢
转载自blog.csdn.net/Gentlemanman/article/details/85275999
今日推荐
周排行