string类的具体实现

Posted zqlucky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了string类的具体实现相关的知识,希望对你有一定的参考价值。

 

bigThree,注意拷贝构造函数的写法。

#ifndef __MYSTRING__
#define __MYSTRING__

class String
{
public:                                 
   String(const char* cstr=0);                     
   String(const String& str);                    
   String& operator=(const String& str);         
   ~String();                                    
   char* get_c_str() const { return m_data; }
private:
   char* m_data;
};

#include <cstring>

inline
String::String(const char* cstr)
{
   if (cstr) {
      m_data = new char[strlen(cstr)+1];
      strcpy(m_data, cstr);
   }
   else {   
      m_data = new char[1];
      *m_data = \0;
   }
}

inline
String::~String()
{
   delete[] m_data;
}

inline
String& String::operator=(const String& str)
{
   if (this == &str)
      return *this;

   delete[] m_data;
   m_data = new char[ strlen(str.m_data) + 1 ];
   strcpy(m_data, str.m_data);
   return *this;
}
//考虑异常安全性的拷贝赋值运算符
inline
String& String::operator=(cosnt String& str){
    if(this != &str){
        String strTmp(str);
        char* pTmp = str.m_data;
        strTmp.m_data = m_data;
        m_data = pTmp;
    }
    return *this;
}

inline
String::String(const String& str)
{
   m_data = new char[ strlen(str.m_data) + 1 ];
   strcpy(m_data, str.m_data);
}

#include <iostream>
using namespace std;

ostream& operator<<(ostream& os, const String& str)
{
   os << str.get_c_str();
   return os;
}

#endif

 

以上是关于string类的具体实现的主要内容,如果未能解决你的问题,请参考以下文章

golang代码片段(摘抄)

java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段

java 代码片段

有条件地导入 python 类的片段

不变的String类

string类的实现加强版