??????????????????о??????????????????????C??????????????????????C++?У????????????????????STL?????????string????????????char????????????????????????????
?????????????????????д?????
??????????£??????????????????string??????????????????????string??????????????????ж???????????飬???string?????????ɡ??????????????κα仯??????????????????????????????????????????????????????????????????????????????Ч??????
???????磬???????μ??????
????int swap(string &x?? string &y)
????{
????string tmp(x);
????x = y;
????y = tmp;
????}
???????????????У????????????????????????????????????string????????????????????????????????????????????????????????????ε???new??????????μ????鰱?????????????????????ε?delete[]???????????????????????????????????????????????????д???????????????????????????????????C++11??&&?????????????????????????????????????string???????????????????????????????????string???飬????????????????????
???????????????д????????????
???????????????д????????????????string?????????????string?????????string????????????string??????????????????????????????????е???????????飬????????????
????????????????????????????????new?????????????????????????????delete[]?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????飬?????????????????????棬????ó??????????????????????????????????????????????????????е???????饗??new??????????????У??????????ü???used??????ж???????????????????棨????????飩??????????????????????????ü???used??1????used?0????????ж????????????棬???????????????????????used????????й???????????????????е????????????????????????????
???????????string??????????????????????
????string s1("abc");
????string s2(s1);
????string s3("edf");
????s2 += s3;
?????????s1??s2??????????е???????????飬????s2??????????????????????????????????????????????s1???????????s2??????????s1??s2????????new???????棬????????????????????????????????μ?????????У???????s3?е?????????????μ?????????С?????д??????????????????????????????ü?????1?????????????μ???е???????飩?????????????new???????棬????????μ????ü??????????μ????????????ü??????1??????????????????????????????????????檔
?????????????????????????
???????????????????????????????????????C++??string???????????????????????????д??????????????????String??
????????????????????????????
????http://download.csdn.net/detail/ljianhui/7143351
??????????_stringv2.h???£?
#ifndef _STRINGV2_H_INCLUDED
#define _STRINGV2_H_INCLUDED
/***
String???????????????????????????????????д?????
?????????????????????????
***/
class String
{
public:
String();
String(const String& s);
String(const char *pc?? size_t len);
String(const char *pc);
~String();
String& operator=(const String &s);
String& operator=(const char *s);
String& operator+=(const String &rhs);
String& operator+=(const char *rhs);
void clear();
size_t getLength()const {return _length;}
const char* cstr()const {return _cstr;}
private://function
void _initString(const char *cstr?? size_t len);
void _decUsed();
char* _renewAndCat(const char *cstr?? size_t len);
void _addString(const char *cstr?? size_t len);
void _addAssignOpt(const char *cstr?? size_t len);
private://data
char *_cstr;
size_t *_used;
size_t _length;
size_t _capacity;
};
String operator+(const String &lhs?? const String &rhs);
std::ostream& operator <<(std::ostream &os?? const String &s);
std::istream& operator >>(std::istream &in?? String &s);
#endif // _STRINGV2_H_INCLUDED
???????????String????????????????????String?????????????????????????????char???_cstr?????????????????????????ü?????size_t???_used????????????String?????в???????????????????????String??д?????й???????
????????????????????????s._cstr????????????????????????????????*s._cstr??????????????????????????????檔?????????????????????????????????????????????????????????????????????????????????к????????????“_”?????
??????????????????????????????????????
????1??????????
????String::String():
????_cstr(NULL)??
????_used(new size_t(1))??
????_length(0)??
????_capacity(0)
????{
????}
??????????????????????????????У???????????new????????棬????????_cstr???NULL??????????????????????????????????????????ó??????????????????????磬???????2????????????????棬
????String s1("abc");
????String s2;
????s2 = s1;
?????????????????????????s2._cstr??????s1._cstr???ɡ???????????????????棬??*_used?????1???????????????????????????????????s2 = s1??????????????????s2._used?????????????????ü??????????1?????s2._cstr???????????????????s1._used?????????????????1????*s2._userd????0?????s2._userd??s2._cstr????????檔???????????*s2._userd??????0??0??1????-1????_userd????????????????????????????2^32-1??????ó??????е???????????????????*s2._userd??????1???????????????????
????2???????????
????String::String(const String &s):
????_cstr(s._cstr)??
????_used(s._used)??
????_length(s._length)??
????_capacity(s._capacity)
????{
????++*_used;
????}
?????????????????????s???????????????*this????????????????*this???????????s????????飬??????e?????????????ü?????1????????this->_used??s._used?????????????
????3????C??????????????
String::String(const char *cstr?? size_t len)
{
if(cstr == NULL)
return;
size_t str_len = strlen(cstr);
if(len <= str_len)
{
_initString(cstr?? len);
}
}
void String::_initString(const char *cstr?? size_t len)
{
if(cstr == NULL)
return;
_cstr = new char[len + 1];
memcpy(_cstr?? cstr?? len);
_cstr[len] = 0;
_used = new size_t(1);
_length = len;
_capacity = len;
}
?????ú????????????????????????????????????C?????????????????????????????????????????????????????飬???????????????棬??????????????????????????????????????????????????????????1.
????4????C???????????????
????String::String(const char *cstr)
????{
????if(cstr == NULL)
????return;
????size_t len = strlen(cstr);
????_initString(cstr?? len);
????}
??????????????????????????????????????????
????5??????????
String::~String()
{
_decUsed();
}
void String::_decUsed()
{
--*_used;
if(*_used == 0)
{
if(_cstr != NULL)
{
delete[] _cstr;
_cstr = NULL;
_length = 0;
_capacity = 0;
}
delete _used;
_used = NULL;
}
}
????_decUsed()???????????????????????????????????????????????????????????????е????????????ü??????1???????ü????0?????????????????ü?????
????6?????????????
????String& String::operator=(const String &s)
????{
????++*(s._used);
????_decUsed();
????_cstr = s._cstr;
????_length = s._length;
????_capacity = s._capacity;
????return *this;
????}
?????????????????????????????????????????????????????????????????????????????????????????????????????????????String??????????????????????????????????????????????????????????????ü?????????????????ü???????????1?????????????????????????????????????????ü???????????ü????????0??????????????????????????_cstr????????delete[]????????????????У???????delete[]????????_cstr???????????????и????
???????????????????ж??????????this?????????????????????????????????????????????????????????????????????????if?ж?????????????*s._used??1??????*s._used?????2????????*(this->_used)??1?????????s??*this?????????????????*(this->_used)????????1????????0?????????????鯔????????????????????????????????????????????_cstr???????s?????????е???????鰱???????????????????ɡ?
????????????????÷?????????????á?
????7?????????????????
????String& String::operator=(const char *cstr)
????{
????if(cstr != NULL)
????{
????_decUsed();
????size_t len = strlen(cstr);
????_initString(cstr?? len);
????}
????return *this;
????}
????????????????????????C??????????????????????????????????String(const char *cstr)?????????????????????????????????????????????????????_decUsed???????????_cstr??????????????????ü???????????????cstr?????????μ???????顣????????????????á?