#include<iostream>
#include<cstring>
using namespace std;
class CMyString
{
char* m_pstr;
public:
CMyString()
{
m_pstr = 0;
}
~CMyString()
{
if (m_pstr != 0)
delete []m_pstr;
}
CMyString(const CMyString &temp)
{
if (temp.m_pstr == 0)
m_pstr = 0;
else
{
m_pstr = new char[strlen(temp.m_pstr) + 1];
strcpy(m_pstr, temp.m_pstr);
}
}
CMyString(const char* str)
{
m_pstr = new char[strlen(str) + 1];
strcpy(m_pstr, str);
}
void setString(const char* str)
{
if (m_pstr)
delete []m_pstr; //释放内存
m_pstr = new char[strlen(str) + 1]; //申请内存
strcpy(m_pstr,str);
}
void display()
{
if (m_pstr)
cout << m_pstr << endl;
}
};
要点
- 析构函数
- 内存泄漏问题
- 指针悬挂问题 -> 复制构造函数
补充
使用VS编译时,始终报错,显示strcpy()函数不安全。
解决方法:VS -> 项目 -> 属性 -> C/C++ -> 常规 -> SDL检查改为否
int main()
{
//应用构造函数
CMyString str1;
str1.setString("haha");
str1.display();
CMyString str2("hello");
str2.display();
//解决内存泄漏
CMyString str3;
str3.setString("haha");
str3.setString("hehe");
str3.setString("huhu");
str3.setString("hihi");
str3.display();
//解决一般的指针悬挂(不是硬要让指针悬挂
CMyString str1("清华大学");
str1.display();
CMyString str2(str1);
str2.display();
CMyString str3;
str3.display();
CMyString str4(str3);
str4.display();
return 0;
}