复制对象时赋值运算符的工作

Working of assignment operator while copying objects

赋值运算符将一个对象按成员方式复制到另一个对象。如果您不重载赋值运算符,它将执行按位复制。 当执行按位分配时,两个对象共享相同的内存位置,并且一个对象的更改反映在另一个对象中。 这个概念和我的代码是背道而驰的。有人可以解释一下为什么吗..

#include<bits/stdc++.h>
using namespace std;
class A
{
    public:
        int x;
};

int main()
{
    A a1,a2;
    a1.x=5;
    a2.x=5;
    a2=a1;
    a1.x=10;
    cout<<a1.x<<" "<<a2.x;
    return 0;
}

When the bitwise assignment is performed both the object shares the same memory location and changes in one object reflect in another object.

错了。抄袭就是抄袭。这意味着源对象内存位置中的数据被复制到目标对象的另一个内存位置。没有完成内存位置共享。

When the bitwise assignment is performed both the object shares the same memory location and changes in one object reflect in another object.

这是不正确的。按位复制分配不会导致对象共享同一内存。这是一个单独的副本,所以 a2a1 实际上在不同的内存位置。

This concept and my code goes contrary.

您可能对使用指针成员变量进行复制赋值的情况感到困惑。在那种情况下,实际上默认的按位分配会导致对象具有指向同一内存的指针,并且需要 deep 复制分配而不是(默认分配)。

虽然您当前的代码没有任何指针成员,因此不需要这样的深拷贝。

如果您在 class 中使用指针,因为两个对象的原点和分配的对象访问相同的内存地址,所以如果您更改此内存位置,则修改对两个对象可见。

#include<bits/stdc++.h>
using namespace std;
class A
{
   public:
     int x;
     int *y;
};

int main()
{
 A a1,a2;
 a1.x=5;
 a1.y = new int(7);
 a2.x=5;
 a2=a1;
 a1.x=10;
 *a2.y = 9;
 cout<<a1.x<<" "<<a2.x;
 cout<<*a1.y<<" "<<*a2.y; // the output is 9 9/ because both object access two same memory address
 return 0;
}

a1 的值被复制到 a2。如果您的 class 有指针,那么指针值,即地址将被复制为相同的,这意味着共享相同的地址,然后改变一个中的值也会改变另一个中的值。

您对默认赋值运算符的理解不正确,默认赋值运算符使用一种称为 member-wise 复制的复制方法。内存我就不分享了

由于您误解了这个概念,因此出现了预期的行为。