重写string 类的构造函数和析构函数

    技术2026-08-21  19

    #include <iostream> #include <assert.h> #include <string.h> using namespace std;

    class String { public:     String(const char * tmp = NULL);         //构造函数     String(const String &object);     //拷贝构造函数     String &operator = (const String &object); //赋值函数     ~String(); private:     char * m_str; };

    String::String(const char *tmp) {     m_str = NULL;     if ( NULL == tmp )     {         m_str = new char[1];         assert ( m_str != NULL );              //检测分配是否成功         memset(m_str,0,sizeof(char)*1);         *m_str = '/0';     }     else     {         int length = strlen(tmp) + 1;        //多分配一个空间,用于结束符         m_str = new char[sizeof(char)*length];         assert ( m_str != NULL );         memset(m_str,0,sizeof(char)*length);         strcpy(m_str,tmp);     } }

    String::String(const String &object) {     m_str = NULL;

        int length = strlen(object.m_str)+1;     m_str = new char[length];     assert ( m_str != NULL );     memset(m_str,0,sizeof(char)*length);

        strcpy(m_str,object.m_str); }

    String & String::operator = (const String & object) {     if (this == &object )   //此处用指针判断     {         return * this;     }     if ( m_str != NULL)     {         delete []m_str;         m_str = NULL;     }     int length = strlen(object.m_str)+1;     m_str = new char[length];     assert ( m_str != NULL );     memset(m_str,0,sizeof(char)*length);     strcpy(m_str,object.m_str);     return * this;    //拷贝完后返回自身,注意是*,因为是引用 }

    String::~String() {     if (m_str != NULL )     {         delete []m_str;         m_str = NULL;     } }

    最新回复(0)