c++ - 复制对象时赋值运算符的工作
问题描述
赋值运算符将一个对象按成员复制到另一个对象。如果不重载赋值运算符,它将执行按位复制。当执行按位赋值时,两个对象共享相同的内存位置,一个对象的变化反映在另一个对象中。这个概念和我的代码相反。有人可以解释一下为什么..
#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;
}
解决方案
当执行按位赋值时,两个对象共享相同的内存位置,一个对象的变化反映在另一个对象中。
这是不正确的。按位复制分配不会导致对象共享相同的内存。它是一个单独的副本,因此a2
实际上a1
位于不同的内存位置。
这个概念和我的代码相反。
您可能对使用指针成员变量完成复制分配的情况感到困惑。在这种情况下,实际上默认的按位分配会导致对象具有指向同一内存的指针,并且需要deep
复制分配(而不是默认分配)。
但是,您当前的代码没有任何指针成员,因此不需要这样的深拷贝。
推荐阅读
- python - Python - 如果未传递所有参数并且不评估 elif 语句,则函数不会返回输出
- netsuite - 显示网络套件中采购订单的“项目”子列表的所有字段
- ignite - 重启 docker 容器时,Ignite 缓存数据丢失
- javascript - 使用相等 (===) 或不相等 (!==) 运算符是否更高效?
- android - 在需要的设备中以编程方式启用自动启动权限
- laravel - Laravel 复杂的地方和地点
- elasticsearch - Elasticsearch - 使字段可聚合但不可搜索
- sql-server - Weka 3.8 - SQL Server 连接
- java - 如何在 Beanshell 中使用或转义 java 8 Lambda 表达式
- android - Android - SMS Retriever API - 计算应用程序的哈希字符串问题