深拷贝与浅拷贝
#ifndef _STRING_H_
#define _STRING_H_
class String
{
public:
String(char* str="");
~String();
String(const String& other);
String& operator=(const String& other);
void Display();
private:
char* AllocAndCpy(char* str);
char* str_;
};
#endif
#include "String.h"
#include <cstring>
#include <iostream>
using namespace std;
String::String(char* str)
{
str_ = AllocAndCpy(str);
}
String::~String()
{
delete[] str_;
}
String::String(const String& other)
{
str_ = AllocAndCpy(other.str_);
}
String& String::operator =(const String &other)
{
if (this == &other)
return *this;
delete[] str_;
str_ = AllocAndCpy(other.str_);
return *this;
}
char* String::AllocAndCpy(char* str)
{
int len = strlen(str) + 1;
char* tmp = new char[len];
memset(tmp, 0, len);
strcpy(tmp, str);
return tmp;
}
void String::Display()
{
cout<<str_<<endl;
}
#include "String.h"
int main(void)
{
String s1("AAA");
s1.Display();
String s2 = s1;
String s3;
s3.Display();
s3 = s2;
return 0;
}