实现string类拷贝构造函数和赋值构造函数

一个简单的string类需要哪些成员呢?

  • 默认构造函数;
  • big three(拷贝构造、拷贝复制、析构)
  • 一个char*指针成员
#include 

using namespace std;"hello");

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

my_string::my_string(const char *cstr){
    cout << "构造函数" << endl;
    if(cstr){
        m_data = new char[strlen(cstr)+1];
        strcpy(m_data, cstr);
    }else{
        m_data = new char[1];
        *m_data = '\0';
    }
}

inline
my_string::my_string(const my_string& str){//编译器合成的默认版本只会简单的拷贝指针(浅拷贝)
    cout << "拷贝构造函数" << endl;

    m_data = new char[strlen(str.m_data) + 1];//深拷贝,先分配空间,自己有自己的备份
    strcpy(m_data, str.m_data);
}

my_string&  my_string::operator=(const my_string& str){//注意内存泄露与自赋值处理
    cout << "拷贝赋值=" << endl;
    if(this == &str)    return *this;//自赋值
    delete[] str.m_data;
    m_data = new char[strlen(str.m_data)+1];
    strcpy(m_data, str.m_data);
    return *this; 
}

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

int main(){
    my_string s1("hello");
    my_string s2 (s1);
    s1 = s2;
    return 0;
}

实现string类拷贝构造函数和赋值构造函数_第1张图片

你可能感兴趣的:(面试/笔试,c++,string)