为什么没有复制构造函数会导致值一起更改?

问题描述 投票:0回答:1

我正在查看此页面上的代码和说明,但我不太了解。 https://www.geeksforgeeks.org/copy-constructor-in-cpp/

下面是我很困惑的例子。为什么str2.change("GeeksforGeeks");导致str1也改变?我问是因为change做与复制构造函数完全相同的事情。他们都为s分配了一个新的char数组。

#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; } // Function to print string 
    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; 
} 
c++
1个回答
2
投票

str2.change("GeeksforGeeks");删除str1仍指向的旧存储器。然后,str1.print()导致未定义的行为,因此任何事情都可能发生。

© www.soinside.com 2019 - 2024. All rights reserved.