1.浅拷贝-shallow copy
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <iostream>
using namespace std;
class MyString
{
public:
MyString(const char *str = "")
{
if(str == NULL)
{
data = new char[1];
data[0] = '\0';
}
else
{
data = new char[strlen(str)+1];
strcpy(data,str);
}
}
~MyString()
{
cout << "~MyString " << data << endl;
delete []data;
data = NULL;
}
public:
char* data;
};
int main()
{
MyString s1("hello");
MyString s2 = s1;
cout << "s1.data's address is " << (void*)(s1.data) << endl;
cout << "s2.data's address is " << (void*)(s2.data) << endl;
}
2.深拷贝-deep copy
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <iostream>
using namespace std;
class MyString
{
public:
MyString(const char *str = "")
{
if(str == NULL)
{
data = new char[1];
data[0] = '\0';
}
else
{
data = new char[strlen(str)+1];
strcpy(data,str);
}
}
MyString(const MyString& s)
{
data = new char[strlen(s.data)+1];
strcpy(data,s.data);
}
MyString& operator=(const MyString& s)
{
if(this!= &s)
{
delete []data;
data = new char[strlen(s.data) + 1];
strcpy(data,s.data);
}
return *this;
}
~MyString()
{
cout << "~MyString " << data << endl;
delete []data;
data = NULL;
}
public:
char* data;
};
int main()
{
MyString s1("hello");
MyString s2 = s1;
cout << "s1.data's address is " << (void*)(s1.data) << endl;
cout << "s2.data's address is " << (void*)(s2.data) << endl;
MyString s3;
cout << "s3.data's address is " << (void*)(s3.data) << endl;
s3 = s2;
cout << "s3.data's address is " << (void*)(s3.data) << endl;
}