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

时间:2016-11-02 19:40:35

标签: c++ operator-overloading assignment-operator

我希望这不会被看到"主要是基于意见的"或者"太广泛"。这是一个相当直接的问题:

重载赋值运算符提供解决方案的一些示例问题是什么?

我认为我还没有看到过它会有用的情况,特别是考虑到一个程序充满了惊人的隐含行为的负面影响以及"烟雾和镜子&#34 ;

1 个答案:

答案 0 :(得分:3)

示例:

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

如果你做了

将会发生什么
X x, y;
x = y;

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

X x = some_obj;

调用复制构造函数(如果rhs是prvalue,则调用elided)。当您说

时,仅在构建之后调用赋值运算符
x = some_other_obj; // x is already constructed here

如果你问operator=是否应该存在(与Java相比),那么这可能是个人偏好的问题。