概述
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++下重写=号运算符解决浅拷贝问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复