c++实现字符串的深拷贝

来源:互联网 发布:并发编程研究内容 编辑:程序博客网 时间:2024/06/16 02:10
/* * 实现字符串的深拷贝 */#include <cstdio>#include <cstring>#include <iostream>using namespace std;class CString{    friend std::ostream& operator<<(std::ostream& os, const CString& str);    public:        CString(const char* p = nullptr);        CString(const CString& str);        CString& operator=(const CString& other);        ~CString();    private:        char* m_data;};CString::CString(const char* p){    std::cout << "CString(const char* p)" << std::endl;    if (p == nullptr)    {        m_data = new char[1];        *m_data = '\0';    }    else    {    int length = strlen(p);        m_data = new char[length+1];    strcpy(m_data, p);    }}CString::CString(const CString& str){    std::cout << "CString(const CString& str)" << std::endl;    int length = strlen(str.m_data);    m_data = new char[length+1];    strcpy(m_data, str.m_data);}CString& CString::operator=(const CString& other){    std::cout << "operator=(const CString& other)" << std::endl;    if (this != &other)    {        CString temp(other);        char *p = temp.m_data;        temp.m_data = m_data;        m_data = p;        //temp离开作用域,自动释放内存    }    return *this;}CString::~CString(){    if (m_data != nullptr)        delete []m_data;}std::ostream& operator<<(std::ostream& os, const CString& str){    os << str.m_data;    return os;}int main(){    const char* p = "hello world";    CString str(p);    std::cout << "str: " << str << std::endl;    //调用拷贝构造函数    CString a(str);    std::cout << "a: " << a << std::endl;    CString b;    //调用赋值构造函数    b = a;    std::cout << "b : " << b << std::endl;    return 0;}
原创粉丝点击