重载赋值运算符的示例应用

Example applications of overloading the assignment operator

我希望这不会被看到 "primarily opinion based" 或 "too broad"。这是一个相当简单的问题:

重载赋值运算符可以解决哪些示例问题?

我认为我还没有看到它有用的情况,尤其是考虑到程序充满意外隐含行为的负面影响和 "smoke and mirrors"。

示例:

struct X
{
    int *p;
    X(): p{new int[42]}
    ~X() { delete p; }
};

如果你这样做会发生什么

X x, y;
x = y;

?默认的赋值运算符将复制原始指针,你最终会被 xy 的析构函数删除同一个指针两次。事实上,您最好也在这里声明一个复制构造函数(或者,更好的是,使用智能指针)。请注意,在

X x = some_obj;

复制构造函数被调用(或者 elided 如果 rhs 是纯右值)。当你说

x = some_other_obj; // x is already constructed here

如果您问 operator= 是否应该存在(相对于 Java),那可能是个人喜好问题。