class myString
{
public:
myString() :m_start(nullptr),m_end(nullptr) {}
myString(std::initializer_list<char> li)
{
size_t st=li.size();
m_start = a.allocate(st);//空间的首地址
m_end = uninitialized_copy(li.begin(),li.end(), m_start);
}
myString(const char * p)
{
size_t st = strlen(p);
m_start = a.allocate(st);//空间的首地址
m_end = uninitialized_copy(p, p + st, m_start);
}
myString(const myString & st)//拷贝初始化不需要 free
{
size_t t_size = st.size();
//free();
m_start = a.allocate(t_size);
m_end= uninitialized_copy(st.m_start, st.m_end, m_start);
}
myString & operator = (const myString & tt)
{
size_t t_size = tt.size();
free();
m_start = a.allocate(t_size);
m_end = uninitialized_copy(tt.m_start, tt.m_end, m_start);
return *this;
}
myString & operator = (const char *p)
{
size_t st = strlen(p);
free();
m_start = a.allocate(st);
m_end = uninitialized_copy(p, p+st, m_start);
return *this;
}
size_t size() const { return (m_end - m_start); }
char * begin() { return m_start; }
char * end() { return m_end; }
~myString() { free(); }
private:
static allocator<char> a;//开辟空间
void free()
{
if (m_start)
{
for_each(m_start, m_end, [this](char & p) {a.destroy(&p); });
a.deallocate(m_start, size());
}
}
private:
char * m_start;//开始位置
char * m_end;//结束位置
};
allocator<char> myString::a;
int main()
{
char * p = "hello";
myString m1(p);
cout << m1.size() << endl;
myString m2(m1);
cout << m2.size() << endl;
myString m3 = m2;
cout << m3.size() << endl;
myString m4 = { 'h','e','l','l','o','e' };
cout << m4.size() << endl;
myString m5("lucy");
cout << m5.size() << endl;
myString m6="lucy";
cout << m6.size() << endl;
return 0;
}
myString类
最新推荐文章于 2023-04-16 10:41:06 发布