【问题标题】:Assignment operator issue赋值运算符问题
【发布时间】:2020-04-29 15:40:51
【问题描述】:

大家好,我一直在研究复制构造函数,我在其中一个网站上遇到了这句话:

当执行按位(赋值运算符)赋值时,两个对象共享相同的内存位置,一个对象的变化反映在另一个对象中。 所以后来我尝试检查它,看看它是否像我写了一些简单的代码如下:

class Base{

public:

Base(int age, string name) :age(age), name(name) {};
Base() {};
void display() {
    cout << age;
}
int age;
string name;

};

int main() {

Base b1(5, "Alek"),b2;

b2 = b1;

b1.display();

b2.age = 10;

b1.display();

system("pause");

所以根据那里写的内容,第二次调用 b1.display() 的值必须是 10 ?但是为什么它仍然显示相同的结果?

【问题讨论】:

  • b2b1 的副本。对其中一项的更改不会反映在另一项中。
  • 我希望您阅读的内容是关于一个对象具有指向另一个对象的指针的情况,在这种情况下,您可以获得两个具有指向另一个对象的相同指针的对象。但你的代码不是那样的。
  • 这是我要引用的网站,如果是这样的话,它并没有说明一个对象指向另一个对象。我不难学习它。:techdifferences.com/…

标签: c++ copy-constructor


【解决方案1】:

复制构造函数通过将一个对象的所有值复制到另一个对象来工作。

使用您的 Base 类,在调用复制构造函数时,所有成员变量都被复制到 b2 中。

当类有指针时,唯一的麻烦就出现了。 考虑将int age; 替换为int* age; 当复制构造函数被调用时,b2 的 age 变量将与 b1 的 age 变量指向同一块内存。

如果复制的是指针本身,而不是指针所在位置存储的动态内存数据。

【讨论】:

  • b2 = b1;在我称之为代码生命周期之前,两个对象都已定义,因此它不是复制构造的工作。检查我在评论中给出的网站,上面也有说明。
猜你喜欢
  • 2011-03-06
  • 2015-10-14
  • 1970-01-01
  • 2011-08-02
  • 2019-10-06
  • 2011-11-16
  • 2011-08-12
  • 2019-08-09
  • 2013-11-30
相关资源
最近更新 更多