【发布时间】:2015-07-21 13:37:19
【问题描述】:
从包括one 在内的各种帖子中,我注意到了复制和交换习语,但是我不确定如何在派生类中实现此代码。 那里的代码指定为
dumb_array& operator=(dumb_array other) // (1)
{
swap(*this, other); // (2)
return *this;
}
我了解,每当在派生类中定义自定义赋值运算符时,该方法就有责任调用基类的赋值运算符。在这种情况下,我将如何以最佳方式调用基类的赋值运算符。这是我的尝试
dumb_array& operator=(dumb_array other)
{
swap(*this, other);
baseclass::operator= other; //Suppose base class has assignment operator resembling this
return *this;
}
我的理解是,如果我们从派生类调用基类赋值运算符,那么复制构造函数(因为参数是值类型)将被调用两次(一次用于派生,然后再次用于基类)(这只是如果它是单个继承链)将派生类的复制赋值运算符与基类一起调用的最佳方法是什么?我们是否需要对 swap 方法进行更改?
【问题讨论】:
-
有没有必要打电话给
baseclass::operator=?