由于浅拷贝,两个对象都指向相同的位置

时间:2016-05-08 09:58:10

标签: c++

我对下面的代码有疑问,在没有复制构造函数的情况下,默认复制构造函数会调用并执行浅复制,之后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;
    }

0 个答案:

没有答案