为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
Why can I assign one object to another without overloading the "=" operator?
我是C++新手,刚刚了解重载运算符。我很困惑,因为似乎我可以将一个对象分配给另一个对象,而不必重载"="运算符。 以这段代码为例:
class process
{
int size;
public:
process(int s)
{
size = s;
}
~process();
int getSize()
{
return size;
}
};
int main()
{
process p1(2);
process p2(3);
p1 = p2;
std::cout << p1.getSize() << "n";
}
输出为:
3
如您所见,进程类"p2"中的信息已复制到"p1",但我没有重载"="运算符。为什么会这样?有没有地方可以让我得到一些关于C++为此做了什么的具体信息?谢谢。
为什么我可以在不重载"="运算符的情况下将一个对象分配给另一个对象?
因为类具有隐式生成的复制(和移动(赋值运算符。
有没有地方可以让我得到一些关于C++为此做了什么的具体信息?
权威信息来源是标准文档。
关于C++的书籍也写过。
但是我为什么要重载"="运算符呢?
没有理由想要重载示例类的赋值运算符。
通常,您可能希望重载,因为
-
编译器生成的赋值运算符无法读取您的思想并执行您希望它执行的操作。 它只做一件事,如果这不是你想要的,那么你需要定义你自己的。如果遵循最佳做法,则大多数情况下,隐式生成的赋值运算符会执行所需的操作。
-
有时您可能希望能够分配其他类型。
-
有时会删除隐式生成的运算符,例如当存在不可分配的成员时。在这种情况下,如果您知道操作员应该做什么,则可以定义自己的定义。
附言编译器还隐式生成析构函数。不需要为类定义析构函数。
相关文章:
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 是否可以使用分配器对象来释放另一个分配器分配的内存?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 有没有办法在同名类 (c++) 中为对象分配一个指针变量
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 在 c++ 中,同一类的一个对象如何分配给同一类的另一个对象?
- Rapidjson将密钥值从一个文档对象分配到另一个文档对象
- RValue 引用在将其绑定(非指针)对象分配给另一个指针后是否会删除该对象?
- 只有当声明一个对象时,内存空间才会分配给类的数据成员,那么为什么 Sizeof(class_name) 给我结果
- 在对象数组C 中分配一个对象
- 在C 中,正在将一个动态分配的对象传递给一个函数(总是)一个坏主意
- C++如果我有一个对象指针,是在堆栈或堆上分配的方法变量
- C++将一个对象分配给另一个类
- 查询对象的地址,而我们正在将一个对象分配给另一个对象
- 将一个对象分配给另一个对象时没有可行的重载'='
- 将一个对象分配给另一个对象时没有可行的重载"="?
- 只从一个对象分配基部分给另一个对象