C++下重写=号运算符解决浅拷贝问题

C++下重写=号运算符解决浅拷贝问题

1 直接看代码就好,用一个类解决掉。

//#define _CRT_SECURE_NOWARNINGS
#pragma warning( disable : 4996) // 避免安全检查 一般超过2010版本的VS都会出现

#include<iostream>
using namespace std;

class Mystring {
public:
	// 无参构造
	Mystring() {
		this->m_data = NULL;
	}
	// 有参构造(str不能设置为默认值,否则调用无参构造时会冲突)
	Mystring(const char *str) {
		this->m_data = (char*)malloc(strlen(str) + 1); // 加1是字符串自动补0
		strcpy(this->m_data, str);
	}
	// 拷贝构造
	Mystring(const Mystring &other){
		this->m_data = (char*)malloc(strlen(other.m_data) + 1);
		strcpy(this->m_data, other.m_data);
	}
	// 重写等号运算符
	Mystring& operator=(Mystring &other){
		// 1 如果是自身 返回自身
		if (this == &other) {
			return *this;
		}
		// 2 如果自己原来的内存没有释放 那就释放
		if (this->m_data != NULL) {
			delete this->m_data;
		}
		// 3 开始进行深拷贝
		this->m_data = (char*)malloc(strlen(other.m_data) + 1);
		strcpy(this->m_data, other.m_data);
		// 4 返回自身
		return *this;
	}
	char* GetData() {
		if (this->m_data == NULL) {
			cout << "m_data is NULL" << endl;
			return (char*)"0";
		}
		return this->m_data;
	}
	~Mystring() {
		if (this->m_data != NULL) {
			delete this->m_data;
			this->m_data = NULL;
		}
	}
private:
	char *m_data;
};

int main() {

	Mystring a;
	cout << a.GetData() << endl;
	Mystring b("123");
	cout << b.GetData() << endl;
	Mystring c(b);
	cout << c.GetData() << endl;
	Mystring d = c;
	cout << d.GetData() << endl;

	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值