#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string.h>
#include<assert.h>
class String
{
public:
//String()
// : _pdata(new char[1])
//{
// *_pdata = '\0';
//}
//
//String(const char* str)
// : _pdata(new char[strlen(str) + 1])
//{
// strcpy(_pdata, str);
//}
//或者这样写
String(const char* str = "")
{
assert(str);
_pdata = new char[strlen(str) + 1];
strcpy(_pdata, str);
}
String(const String& rhs)//这里必须是引用,要不然会再次构造rhs
: _pdata(new char[rhs.size() + 1])
{
strcpy(_pdata, rhs.c_str());
}
String& operator=(String rhs) // 这里必须是值传递,不能是引用,要构造一个rhs出来,
{
swap(rhs);
return *this;
}
// C++ 11
String& operator=(String&& rhs)
{
swap(rhs);
return *this;
}
size_t size() const
{
return strlen(_pdata);
}
const char* c_str() const
{
return _pdata;
}
void swap(String& rhs)
{
std::swap(_pdata, rhs._pdata);
}
~String()
{
delete[] _pdata;
}
private:
char* _pdata;
};
C++:模拟实现string类
最新推荐文章于 2022-12-02 18:06:06 发布