我对下面的代码有疑问,在没有复制构造函数的情况下,默认复制构造函数会调用并执行浅复制,之后str1.s和str2.s都指向字符串“GeekQuiz”。
但是在我删除了str2.s之后它的destruct-或者被调用并将其设置为NULL,但是str1.s仍然指向释放的内存。
现在,当我分配一个新字符串“GeeksforGeeks”并将str2.s指向它时,我不明白为什么str1.s也指向同一个新字符串“GeekforGeek”
#include < iostream >
#include < cstring >
using namespace std;
class String
{
private:
char *s;
int size;
public:
String(const char *str = NULL); // constructor
~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("GeeksQuiz");
String str2 = str1;
str1.print(); // what is printed ?
str2.print();
str2.change("GeeksforGeeks");
str1.print(); // what is printed now ?
str2.print();
return 0;
}