我是靠谱客的博主 高兴吐司,最近开发中收集的这篇文章主要介绍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;
}

最后

以上就是高兴吐司为你收集整理的C++下重写=号运算符解决浅拷贝问题的全部内容,希望文章能够帮你解决C++下重写=号运算符解决浅拷贝问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部