STRING.h文件
#pragma once
#include<string.h>
class String
{
public:
String(char* str="") //深拷贝
:_str(new char[strlen(str)+1])
{
strcpy(_str, str);
cout << "构造函数 " << endl;
}
~String()
{
if (_str!=NULL)
{
delete[]_str;
}
cout << "析构函数" << endl;
}
String(const String& s) //深拷贝
:_str(new char[strlen(s._str) + 1])
{
strcpy(_str, s._str);
cout << "拷贝构造函数" << endl;
}
/*String(const String& s)
:_str(NULL)
{
String tmp(s._str);
swap(_str, tmp._str);
}*/
String &operator=(const String& s)
{
if (this != &s) //传统写法,有弊端
{
/*delete[]_str;
_str = new char[(strlen(s.str) + 1)];//----如果没有空间怎么办
strcpy(_str, s._str);*/
char *tmp = new char[strlen(s._str) + 1];//现代写法
strcpy(tmp, s._str);
delete[] _str;
_str = tmp;
}
cout << "赋值运算符重载" << endl;
return *this;
}
private:
char* _str;
};
test.cpp文件
#include<iostream>
using namespace std;
#include"STRING.h"
int main()
{
String s1;
String s2("abcd");
s1 = s2;
String s3 = s2;
int i = 0;
system("pause");
return 0;
}
深拷贝&浅拷贝