我已将以下代码用于赋值运算符重载:

SimpleCircle SimpleCircle::operator=(const SimpleCircle & rhs)
{
     if(this == &rhs)
        return *this;
     itsRadius = rhs.getRadius();
     return *this;
}

我的复制构造函数是这样的:
SimpleCircle::SimpleCircle(const SimpleCircle & rhs)
{
    itsRadius = rhs.getRadius();
}

在上面的运算符重载代码中,由于正在创建新对象,因此调用了复制构造函数;因此,我使用下面的代码:
SimpleCircle & SimpleCircle::operator=(const SimpleCircle & rhs)
{
    if(this == &rhs)
       return *this;
    itsRadius = rhs.getRadius();
    return *this;
}

它可以正常工作,避免了复制构造函数问题,但是对此有任何未知的问题(对我而言)吗?

最佳答案

第二版赋值运算符没有问题。实际上,这是赋值运算符的标准方法。

编辑:请注意,我指的是赋值运算符的返回类型,而不是实现本身。正如评论中指出的那样,实现本身是另一个问题。参见here

关于c++ - C中的赋值运算符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10076285/

10-09 13:25