【发布时间】:2012-04-22 00:11:01
【问题描述】:
我使用以下代码进行赋值运算符重载:
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;
}
它工作得很好并且避免了复制构造函数问题,但是关于这个(对我来说)有什么未知的问题吗?
【问题讨论】:
-
@Praetorian 如果您知道在赋值运算符期间可能会抛出一个项目,或者如果您正在使用尚未开发的软件并且不知道是否会发生抛出,则复制和交换习语很好.如果您正在使用自己的项目,并且您知道使用复制和交换习语不会引发任何错误。