#include要点#include 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;
}



