如何在我自己的赋值运算符中调用默认赋值运算符?

时间:2013-10-25 04:54:10

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

我的代码的一个非常简化的版本如下:

class bCls {
    private:
        /// Many members, not shown for simplicity.
    public:
        /// Custom assignment operator; I would like to use the default operator within.
        bCls& operator=(bCls&& rhs) {
            defaultoperator=(rhs);
            someCustomOperations();
            return *this;
        }
};

使用默认赋值运算符代替defaultoperator =(bCls&&)是否有优雅的解决方案?我不想求助于bCls的辅助或基类,显然我不想成员指派任务。基础或嵌套类是唯一可能的解决方案吗?我希望找到一种能让代码保持可读的解决方案。

3 个答案:

答案 0 :(得分:1)

您可以将一个转发给另一个

A& operator=( const A& ) = default;
A& operator=( A&& a )
{
    std::cout << "=1" << std::endl;
    *this = a;
    std::cout << "=2" << std::endl;
    return a;
}

您不能使用与您自己的实现相同的签名,而相同方法的第二个默认生成的实现不能共存。

Live example

答案 1 :(得分:0)

您还可以将数据成员存储在std::tuple中,并使用元组的operator=。不过,我不确定我会把它称为基类的优秀解决方案。

答案 2 :(得分:-1)

您的意思是*this ::operator=(rhs);吗?