只需要拷贝和赋值
#include <iostream>
using namespace std;
namespace lhy
{
class string
{
public:
string (const char*str=""):_str(new char[strlen(str)+1])
{
strcpy(_str,str);
}
~string()
{
delete[]_str;
_str=nullptr;
}
/*
传统写法
//s2(s1)
string (const string& s):_str(new char[strlen(s._str)+1])
{
strcpy(_str,s._str);
}
//s1=s2
string& operator=(const string& s)
{
if(this!=&s)
{
delete[] _str;
_str=new char[strlen(s._str)+1];
strcpy(_str,s._str);
}
return *this;
}
*/
string(const string&s):_str(nullptr)//_str必须初始化为nullptr否则tmp出了作用域清理会崩
{
string tmp(s._str);
swap(tmp._str,this->_str);
}
string &operator=(string s)//s不能带引用,形参的改变不会改变实参,虽然两个交换了,但只改变了this->_str
{
swap(s._str,this->_str);
return *this;
}
string &operator()(const char*str)
{
string temp(str);
swap(_str,temp._str);
//temp._str=nullptr;
return *this;
}
char* set(char*s)
{
_str=s;
return _str;
}
const char*get()
{
return _str;
}
private:
char* _str;
};
}
int main()
{
lhy::string s1("hhh");
cout<<s1.get()<<endl;
lhy::string s2(s1);
cout<<s2.get()<<endl;
lhy::string s3("hh");
s3=s1;
cout<<s3.get()<<endl;
s1("lll");
cout<<s1.get()<<endl;
return 0;
}