为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?

Why can I assign one object to another without overloading the "=" operator?

本文关键字:一个对象 分配 情况下 运算符 我可以 重载 为什么      更新时间:2023-10-16

我是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++的书籍也写过。


但是我为什么要重载"="运算符呢?

没有理由想要重载示例类的赋值运算符。

通常,您可能希望重载,因为

  • 编译器生成的赋值运算符无法读取您的思想并执行您希望它执行的操作。 它只做一件事,如果这不是你想要的,那么你需要定义你自己的。如果遵循最佳做法,则大多数情况下,隐式生成的赋值运算符会执行所需的操作。

  • 有时您可能希望能够分配其他类型。

  • 有时会删除隐式生成的运算符,例如当存在不可分配的成员时。在这种情况下,如果您知道操作员应该做什么,则可以定义自己的定义。

<小时 />

附言编译器还隐式生成析构函数。不需要为类定义析构函数。

相关文章: