gpt4 book ai didi

c++ - 制作复制构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:40 26 4
gpt4 key购买 nike

我有一个关于复制构造函数的问题。我在互联网上看到这些例子。第一个说没有复制构造函数,如果你在 student2 上更改某些内容,相同的字段也会在 student1 上更改。但在第二个示例中,由于复制构造函数,student2 的更改不会影响 student1。我不明白这是怎么发生的,实际上复制构造函数在这里做什么? (抱歉英语不好)(感谢所有回答 :) )

class MITStudent {
public:
int studentID;
char *name;
MITStudent() {
studentID = 0;
name = "";
}

};
int main() {
MITStudent student1;
student1.studentID = 98;
char n[] = "foo";
student1.name = n;
MITStudent student2 = student1;
student2.name[0] = 'b';
cout << student1.name; // boo
}

第二个

class MITStudent {
public:
int studentID;
char *name;
MITStudent() {
studentID = 0;
name = "";
}

MITStudent(MITStudent &o) {
name = my_strdup(o.name);
studentID = o.studentID;
}

};
int main() {
MITStudent student1;
student1.studentID = 98;
char n[] = "foo";
student1.name = n;
MITStudent student2 = student1;
student2.name[0] = 'b';
cout << student1.name; // foo

最佳答案

如果您不指定自己的复制构造函数,系统会自动生成默认复制构造函数。
他们只是按值将所有类(class)成员复制到新类(class)。

当您将指针作为类成员时,通常会出现问题。
默认的复制构造函数只会复制指针持有的地址。
这意味着原始类和复制类现在都指向同一个对象。

这正是您使用 char* "string"的示例中发生的情况...

顺便说一句,作为经验法则..如果您有一个以指针作为成员的类,请创建一个自定义复制构造函数。

关于c++ - 制作复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11702462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com