7.三大函数:拷贝构造,拷贝赋值,析构函数

拷贝构造
拷贝复制
析构函数是由编译器在对象生命周期结束时自动调用的,用来释放内存
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;
};

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];/
分配一块1个字符的内存 */
m_data = '\0';/ 赋值为空字符串 */
}
}

/* 析构函数 /
inline
String::~String()
{
delete[] m_data;/
释放内存 */
}

/* 拷贝构造函数 /
inline
String::String(const String& str)
{
m_data = new char[strlen(str.m_data) + 1];
strcpy(m_data, str.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;

}

posted @ 2026-01-06 14:48  r5ett  阅读(1)  评论(0)    收藏  举报