首页 > 解决方案 > 复制对象时赋值运算符的工作

问题描述

赋值运算符将一个对象按成员复制到另一个对象。如果不重载赋值运算符,它将执行按位复制。当执行按位赋值时,两个对象共享相同的内存位置,一个对象的变化反映在另一个对象中。这个概念和我的代码相反。有人可以解释一下为什么..

#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;
}

标签: c++operatorsvariable-assignment

解决方案


当执行按位赋值时,两个对象共享相同的内存位置,一个对象的变化反映在另一个对象中。

这是不正确的。按位复制分配不会导致对象共享相同的内存。它是一个单独的副本,因此a2实际上a1位于不同的内存位置。

这个概念和我的代码相反。

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

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


推荐阅读