#include<cstring>
#include<iostream>
using namespace std;
class s{
public:
s();
s(const char* c);
s(const s& s2);
void print1();
s& operator=(const s& s2);
~s();
private:
char* p;
};
s::s(const char* c){
int len=strlen(c);
if(0==len){
p=new char('\0');
}else{
p=new char[len+1];
memcpy(p,c,len+1);
}
}
void s::print1(){
cout<<p<<endl;
}
s::s():p(new char[1]){
*p='\0';
};
s::s(const s& c){
int len=strlen(c.p);
if(0==len){
p=new char('\0');
}else{
p=new char[len+1];
memcpy(p,c.p,len+1);
}
}
s& s::operator=(const s& c){
s c2(c);
std::swap(p,c2.p);
return *this;
}
s::~s(){
if(p){
delete [] p;
p=NULL;
cout<<"对象被析构。"<<endl;
}
}
int main(){
s s1("hello world!");
s1.print1();
s s2(s1);
s2.print1();
s s3;//默认构造函数不能带括号,为方法
s3.print1();
s3=s2;
s3.print1();
return 0;
}