class String
{
public:
String(const char *str = NULL);
~String();
void print();
void operator =(const char*str);
void operator =(String str);
private:
char *m_str;
};
void String ::operator=(const char*str)
{
int len = strlen(str);
m_str = new char[len + 1];
strcpy_s(m_str, len + 1, str);
}
void String ::operator=(String str)
{
int len = strlen(str.m_str);
m_str = new char[len + 1];
strcpy_s(m_str, len + 1, str.m_str);
}
String::String(const char *str)
{
if (str == NULL)
{
m_str = new char[1];
m_str = '\0';
}
else
{
int len = strlen(str);
m_str = new char[len + 1];
strcpy_s(m_str,len+1,str);
}
}
String::~String()
{
cout << "析构"<<m_str<<endl;
if(m_str==NULL)
{
return;
}
delete[]m_str;
m_str = NULL;
}
void String::print()
{
cout<<m_str<<endl;
}
int main()
{
String s1("abcde");
s1.print();
s1 = "123456";
s1.print();
String s2 = "321";
s1 = s2;
s1.print();
return 0;
}
s1=s2,这行之后调用析构函数析构了s2,并且报错,为什么
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- threenewbee 2019-04-11 19:45关注
#include <iostream> using namespace std; class String { public: String(const char *str = NULL); String(const String& str) { int len = strlen(str.m_str); m_str = new char[len + 1]; strcpy_s(m_str, len + 1, str.m_str); } ~String(); void print(); void operator =(const char*str); void operator =(String str); private: char *m_str; }; void String ::operator=(const char*str) { int len = strlen(str); m_str = new char[len + 1]; strcpy_s(m_str, len + 1, str); } void String ::operator=(String str) { int len = strlen(str.m_str); m_str = new char[len + 1]; strcpy_s(m_str, len + 1, str.m_str); } String::String(const char *str) { if (str == NULL) { m_str = new char[1]; m_str = '\0'; } else { int len = strlen(str); m_str = new char[len + 1]; strcpy_s(m_str,len+1,str); } } String::~String() { cout << "析构"<<m_str<<endl; if(m_str==NULL) { return; } delete[]m_str; m_str = NULL; } void String::print() { cout<<m_str<<endl; } int main() { String s1("abcde"); s1.print(); s1 = "123456"; s1.print(); String s2 = "321"; s1 = s2; s1.print(); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报