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;
}

浙公网安备 33010602011771号