/*
* 实现字符串的深拷贝
*/
#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;
}
c++实现字符串的深拷贝
最新推荐文章于 2024-05-03 12:36:30 发布