如何避免在Derived类操作中复制?

时间:2018-02-08 06:29:36

标签: c++

我有以下类结构:

class Base{
public:
    Base() {}

    Base(const Base& b){
        cout << "Base Copy" << endl;
        *this = b;
    }

    Base baseOperation(Base& base){
        return Base();
    }
};

class Derived : public Base{
public:
    Derived(){}

    Derived( const Base &d ) : Base(d)
    {
        cout << "Derived Copy: " << endl;
    }

    Derived operation(Derived& input){
        return baseOperation(input);
    }

};

Base基本上是我正在使用的库。它有一个名为baseOperation的运算符,它接收并返回一个输出;我想绕过那个输出但是没有同时制作基础和派生的副本。现在制作双份副本会减慢我的节目速度。有没有办法避免这个

1 个答案:

答案 0 :(得分:0)

这里唯一的副本可能是在

的return语句中构造Derived对象时
Derived operation(Derived& input){
    return baseOperation(input);
}

RVO消除了所有其他复制操作。当然,如果您可以访问Base的来源,则可以将复制更改为移动。但也许值得考虑聚合而不是继承