为什么没有复制构造函数会导致值一起更改?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么没有复制构造函数会导致值一起更改?相关的知识,希望对你有一定的参考价值。
我正在查看此页面上的代码和说明,但我不太了解。 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;
答案
str2.change("GeeksforGeeks");
删除str1
仍指向的旧存储器。然后,str1.print()
导致未定义的行为,因此任何事情都可能发生。
以上是关于为什么没有复制构造函数会导致值一起更改?的主要内容,如果未能解决你的问题,请参考以下文章