【发布时间】:2018-04-28 05:32:16
【问题描述】:
这是我的代码:
#include<iostream>
#include<cstring>
using namespace std;
class String
{
private:
char *s;
int size;
public:
String(const char *str = NULL); // constructor
String& operator=(String &c){
size = strlen(c.s);
s = new char[size+1];
strcpy(s, c.s);
}
~String() { delete [] s; }// destructor
void print() { cout << s << endl; }
void change(const char *); // Function to change
};
String::String(const char *str)
{
size = strlen(str);
s = new char[size+1];
strcpy(s, str);
}
void String::change(const char *str)
{
delete [] s;
size = strlen(str);
s = new char[size+1];
strcpy(s, str);
}
int main()
{
String str1("learnc++");
String str2 = str1;
str1.print(); // what is printed ?
str2.print();
str2.change("learnjava");
str1.print(); // what is printed now ?
str2.print();
return 0;
}
可以编译,结果是:
learnc++
learnc++
learnjava
learnjava
除此之外,还有:
*** Error in `./code': double free or corruption (fasttop): 0x0000000000f7f010 ***
BTY,如果我删除“delete [] s;”在String::change中,结果就变成了:
learnc++
learnc++
learnc++
learnjava
并没有出现错误,为什么? 代码来自geek foe feeks,我修改了一些字符串,代码可以在它的IDE中运行,但是在我的ubuntu 14.04中,它不能。
【问题讨论】:
标签: c++ copy-constructor deep-copy